Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 【Android圖像處理】實現鏡面濾鏡的另一種方式

【Android圖像處理】實現鏡面濾鏡的另一種方式

編輯:關於Android編程

今天在慕課網看了一個視頻,介紹了幾種圖像處理的方法,其中有一種就是鏡面效果,但是他是通過自定義view的方式實現的,但是算法都大同小異。

他的自定義view:

package com.zkp.image2;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.LinearGradient;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Shader.TileMode;
import android.util.AttributeSet;
import android.view.View;

public class ReflectView extends View {
	
	private Bitmap mSrcBitmap;
	private Bitmap mRefBitmap;
	private Paint mPaint;

	public ReflectView(Context context, AttributeSet attrs, int defStyleAttr) {
		super(context, attrs, defStyleAttr);
		initView();
	}

	public ReflectView(Context context, AttributeSet attrs) {
		super(context, attrs);
		initView();
	}

	public ReflectView(Context context) {
		super(context);
		initView();
	}
	
	private void initView(){
		
		mSrcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image);
		int w = mSrcBitmap.getWidth();
		int h = mSrcBitmap.getHeight();
		
		Matrix matrix = new Matrix();
		matrix.setScale(1, -1);
		mRefBitmap = Bitmap.createBitmap(mSrcBitmap, 0, 0, w, h, matrix, true);
		mPaint = new Paint();
		
		mPaint.setShader(new LinearGradient(0, mSrcBitmap.getHeight(),
                0, mSrcBitmap.getHeight() * 1.4F,
                0XDD000000, 0X10000000, TileMode.CLAMP));
		
		mPaint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));
	}
	
	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		canvas.drawColor(Color.BLACK);
		canvas.drawBitmap(mSrcBitmap, 0, 0, null);
		canvas.drawBitmap(mRefBitmap, 0, mSrcBitmap.getHeight(), null);
		
		canvas.drawRect(0, mRefBitmap.getHeight(), mRefBitmap.getWidth(),
                mRefBitmap.getHeight() * 2, mPaint);
	}

}
關於自定義view的用法,其實和Android本身的view用法一樣。

 

對應的布局文件如下:

 




    
    
再寫一個activity綁定這個布局文件就能實現鏡面濾鏡,不用設置任何的點擊事件。

 

下面來看一下他的效果:

\

效果其實是差不多的。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved