package com.dh.foundation.widget.afkimageview; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; /** * Created by Lee on 2015/9/28. */ public class CenterExpandAnimation extends ToggleAnimation{ private Paint mPaint; private Bitmap bitmapDis; private Bitmap bitmapSrc; private PorterDuffXfermode porterDuffXfermode; private Canvas disCanvas; private int width,height; private int w,h; public CenterExpandAnimation() { init(); } private void init(){ mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); porterDuffXfermode = new PorterDuffXfermode(PorterDuff.Mode.SRC_IN); } @Override public void setImage(Drawable drawable) { super.setImage(drawable); if(drawable != null){ width = drawable.getIntrinsicWidth(); height = drawable.getIntrinsicHeight(); bitmapSrc = ((BitmapDrawable)drawable).getBitmap(); bitmapDis = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); disCanvas = new Canvas(bitmapDis); // disCanvas.drawColor(Color.TRANSPARENT); // disCanvas.drawCircle(width/2,height/2,100,mPaint); } } @Override protected void drawLastDrawable(Canvas canvas) { } @Override protected void drawDrawable(Canvas canvas) { zoom(canvas,mDrawable); } @Override protected void finish(Canvas canvas) { } private void zoom(Canvas canvas,Drawable drawable){ w = (int)((1-progress) * width); h = (int)((1-progress) * height); // drawable.setAlpha(255); // disCanvas.drawColor(Color.TRANSPARENT); disCanvas.drawCircle(width / 2, height / 2, width * (1 - progress), mPaint); int sc = canvas.saveLayer(0,0,width,height,null,Canvas.ALL_SAVE_FLAG); canvas.drawBitmap(bitmapDis,0,0,mPaint); mPaint.setXfermode(porterDuffXfermode); canvas.drawBitmap(bitmapSrc, 0, 0, mPaint); mPaint.setXfermode(null); canvas.restoreToCount(sc); } }