刮刮卡效果
来源:互联网 发布:淘宝的香港通利琴行 编辑:程序博客网 时间:2024/05/22 03:42
package com.app.yunrich.myapplication;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.PixelXorXfermode;import android.graphics.PorterDuff;import android.graphics.PorterDuffXfermode;import android.graphics.Xfermode;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;/** * Created by Administrator on 2016/5/13. */public class XOR extends View { Paint paint; Bitmap src; Path mask; Canvas bpaint; public XOR(Context context) { super(context); } public XOR(Context context, AttributeSet attrs) { super(context, attrs); init(); } public XOR(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } Bitmap d; public void init(){ d = BitmapFactory.decodeResource(getResources(),R.drawable.main); src = Bitmap.createBitmap(d.getWidth(),d.getHeight(), Bitmap.Config.ARGB_8888); mask = new Path(); bpaint = new Canvas(src); bpaint.drawBitmap(d,0,0,new Paint()); bpaint.drawColor(Color.GRAY); paint = new Paint(); paint.setStrokeWidth(24); paint.setStyle(Paint.Style.STROKE); paint.setAlpha(0); //paint.setColor(Color.RED); PorterDuffXfermode xfermode1 = new PorterDuffXfermode(PorterDuff.Mode.DST_IN); paint.setXfermode(xfermode1); } @Override public boolean onTouchEvent(MotionEvent event) { float x = event.getX(); float y = event.getY(); switch (event.getAction()){ case MotionEvent.ACTION_DOWN: mask.reset(); mask.moveTo(x,y); break; case MotionEvent.ACTION_MOVE: mask.lineTo(x,y); bpaint.drawPath(mask,paint); break; case MotionEvent.ACTION_UP: break; } invalidate(); return true; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawBitmap(d,0,0,null); canvas.drawBitmap(src, 0,0,null); }}
代码如上.
原理:实现擦除效果需要一个蒙版,将蒙版遮盖在原图上,就可以实现刮刮乐了
重点在蒙版的实现:
1、创建一个画布,并设置成灰色
2、记录轨迹path,并利用混合效果使得path 记录的地方经过运算alpha通道为0,(DST_IN 和ALPHA =0)
paint.setAlpha(0);PorterDuffXfermode xfermode1 = new PorterDuffXfermode(PorterDuff.Mode.DST_IN);
0 0
- 刮刮卡效果
- 刮刮卡效果
- 刮刮卡效果
- 使用webview实现刮刮卡效果,模拟器有刮卡效果,真机无效果
- html5实现刮刮卡效果
- flash刮刮卡效果实现
- Android刮刮卡效果
- Android刮刮卡效果
- canvas之刮刮卡效果
- HTML5实现刮刮卡效果
- android刮刮卡效果
- HTML5 刮刮卡效果
- Android 实现刮刮卡效果
- 自定义View2 刮刮卡效果
- Android开发-刮刮卡效果
- Android 刮刮卡效果
- Android 刮刮卡实现效果
- android 刮刮卡效果
- 【ANDROID】解决使用ZXING扫码,距离近无法识别的问题。
- PullToRefresh第三方刷新控件使用总结
- request.sendRedirect(重定向)和request.getRequestDispatcher(请求转发)
- 触发器
- jquery,php实现文件下载和统计下载次数
- 刮刮卡效果
- 微信第三方网页授权关于回调域名的问题
- 130. Surrounded Regions
- 关于mmorpg游戏的压力测试
- Linux修改时区
- darwin streaming server 媒体服务器发送本地自己的文件,使用quicktime pro标记-流
- Android 开发之 fragment 与 activity的生命周期
- 使用WireShark抓包分析Android网络请求时间(二)
- WebService入门详解