package com.com.mr_wrong.CustomView.Shader; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.ColorMatrixColorFilter; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.graphics.RadialGradient; import android.graphics.Shader; import android.util.AttributeSet; import android.view.View; import com.Utils.ScreenUtils; import com.example.mr_wrong.androidstudioproject.R; /** * Created by Mr_Wrong on 15/8/25. * 梦幻相机效果 径向渐变 */ public class DreamEffectView extends View { private Paint mPaint, mShaderpaint; private int x, y; private Bitmap mBitmap; private PorterDuffXfermode xfermode; private int width, height; public DreamEffectView(Context context, AttributeSet attrs) { super(context, attrs); xfermode = new PorterDuffXfermode(PorterDuff.Mode.SCREEN); mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.testimage); width = ScreenUtils.getScreenWidth(context); height = ScreenUtils.getScreenHeight(context); x = width / 2 - mBitmap.getWidth() / 2; y = height / 2 - mBitmap.getHeight() / 2; mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setColorFilter(new ColorMatrixColorFilter(new float[] { 0.8587F, 0.2940F, -0.0927F, 0, 6.79F, 0.0821F, 0.9145F, 0.0634F, 0, 6.79F, 0.2019F, 0.1097F, 0.7483F, 0, 6.79F, 0, 0, 0, 1, 0 })); mShaderpaint = new Paint(); mShaderpaint.setShader(new RadialGradient(width/2,height/2,mBitmap.getHeight()*7/8, Color.TRANSPARENT, Color.BLACK, Shader.TileMode.CLAMP)); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawColor(Color.BLACK); int sc = canvas.saveLayer(x,y,x+mBitmap.getWidth(),y+mBitmap.getHeight(),null,Canvas.ALL_SAVE_FLAG); canvas.drawColor(0xcc1c093e); mPaint.setXfermode(xfermode); canvas.drawBitmap(mBitmap,x,y,mPaint); mPaint.setXfermode(null); canvas.restoreToCount(sc); canvas.drawRect(x,y,x+mBitmap.getWidth(),y+mBitmap.getHeight(),mShaderpaint); } }