package com.cheng.animationstudy.customview.ucbrowser; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.os.Build; import android.util.AttributeSet; import android.widget.FrameLayout; /** * 仿UC浏览器下拉动画中的眼睛 */ public class EyeView extends FrameLayout { private Paint mPaint; private Bitmap mBitmap; public EyeView(Context context) { super(context); init(); } public EyeView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public EyeView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { setDrawingCacheEnabled(true); if (Build.VERSION.SDK_INT >= 11) { setLayerType(LAYER_TYPE_SOFTWARE, null); } mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); } @Override protected void dispatchDraw(Canvas canvas) { super.dispatchDraw(canvas); if (mBitmap != null) { mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); canvas.drawBitmap(mBitmap, 0, 0, mPaint); mPaint.setXfermode(null); } } public void setRadius(int radius) { if (mBitmap!=null && !mBitmap.isRecycled()) { mBitmap.recycle(); } mBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(mBitmap); canvas.drawCircle(getWidth() / 2f, getHeight() / 2f, radius, mPaint); invalidate(); } }