Andriod实现刮刮卡的效果
发布时间:2020-12-15 03:20:44 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 使用paint.setXfermode 来进行消除手势滑动区域 import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapF
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考
使用paint.setXfermode 来进行消除手势滑动区域
import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; /** * Created by Administrator on 2015/7/29. */ public class GuaView extends View { private Path mPath; private Paint mInnerPaint; //内层图层Paint private Paint mOuterPaint; //外层图层Paint private Bitmap mGuaBitmap; //用于处理刮奖的Bitmap private Bitmap mOuterBitmap; //外层图层Bitmap private Canvas mCanvas; private int mWidth,mHeight; private float mLastX; private float mLastY; private String mText; public GuaView(Context context,AttributeSet attrs) { super(context,attrs); init(); } private void init() { mPath = new Path(); mOuterPaint = new Paint(); mInnerPaint = new Paint(); //创建外层图层 mOuterBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.guaguaka).copy(Bitmap.Config.ARGB_8888,true); mText = "¥500"; } @Override protected void onMeasure(int widthMeasureSpec,int heightMeasureSpec) { super.onMeasure(widthMeasureSpec,heightMeasureSpec); mWidth = mOuterBitmap.getWidth(); mHeight = mOuterBitmap.getHeight(); //创建内层图层 mGuaBitmap = Bitmap.createBitmap(mWidth,mHeight,Bitmap.Config.ARGB_8888); mCanvas = new Canvas(mGuaBitmap); mCanvas.drawBitmap(mOuterBitmap,null); //将mOuterBitmap画到mCanvas上,与mGuaBitmap关联 setOuterPaint(); setInnerPaint(); } private void setInnerPaint() { mInnerPaint.setColor(Color.RED); mInnerPaint.setStyle(Paint.Style.STROKE); mInnerPaint.setStrokeCap(Paint.Cap.ROUND); mInnerPaint.setStrokeJoin(Paint.Join.ROUND); mInnerPaint.setAntiAlias(true); mInnerPaint.setDither(true); //防抖 mInnerPaint.setStrokeWidth(5); mInnerPaint.setTextSize(100); mInnerPaint.setTextAlign(Paint.Align.CENTER); } private void setOuterPaint() { mOuterPaint.setColor(Color.GREEN); mOuterPaint.setStyle(Paint.Style.STROKE); mOuterPaint.setStrokeCap(Paint.Cap.ROUND); mOuterPaint.setStrokeJoin(Paint.Join.ROUND); mOuterPaint.setAntiAlias(true); mOuterPaint.setDither(true); //防抖 mOuterPaint.setStrokeWidth(20); } @Override //Path public boolean onTouchEvent(MotionEvent event) { float x = event.getX(); float y = event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mLastX = x; mLastY = y; mPath.moveTo(x,y); break; case MotionEvent.ACTION_MOVE: float deltaX = Math.abs(x - mLastX); float deltaY = Math.abs(y - mLastY); if (deltaX > 5 || deltaY > 5) { mPath.lineTo(x,y); } mLastX = x; mLastY = y; break; case MotionEvent.ACTION_UP: break; } invalidate(); return true; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawColor(Color.parseColor("#bbbbbb")); //背景底色 灰色 canvas.drawText(mText,mWidth / 2,mHeight / 4 * 3,mInnerPaint); //绘制文本 canvas.drawBitmap(mGuaBitmap,null); //绘制外层Bitmap,将mBitmap显示在界面上 drawPath(); } private void drawPath() { //使用该mode:dst和src相交后, 只保留dst,且除去相交的部份 mOuterPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT)); mCanvas.drawPath(mPath,mOuterPaint); } } 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |