刮刮卡 java代码_Android刮刮卡效果实现代码

本文介绍了如何在Android中实现刮刮卡效果,通过创建一个底层图片和上层遮罩层,利用PorterDuffXfermode实现手指滑动去除遮罩的功能。详细讲解了XfermodeView类的实现,并探讨了PorterDuff.Mode的不同模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文实例为大家分享了Android刮刮卡效果,供大家参考,具体内容如下

android实现底层一张图片,上层一个遮罩层,触摸滑动按手指滑动路径实现去除遮罩效果,类似于抽奖的刮刮卡一样,不多说先上张效果图:

9650402e57a9610d0bafc93214e0e5ed.gif

直接上代码:

XfermodeView.java/**

* Created by 57 on 2016-4-21.

*/

public class XfermodeView extends View{

private Bitmap mBgBitmap,mFgBitmap;

private Paint mPaint;

private Canvas mCanvas;

private Path mPath;

public XfermodeView(Context context) {

super(context);

init();

}

public XfermodeView(Context context, AttributeSet attrs) {

super(context, attrs);

init();

}

public XfermodeView(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

init();

}

@Override

protected void onDraw(Canvas canvas) {

canvas.drawBitmap(mBgBitmap,0,0,null);

canvas.drawBitmap(mFgBitmap,0,0,null);

}

private void init() {

mPaint = new Paint();

mPaint.setAlpha(0);

mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));

mPaint.setStyle(Paint.Style.STROKE);

mPaint.setStrokeJoin(Paint.Join.ROUND);

mPaint.setStrokeWidth(50);

mPaint.setStrokeCap(Paint.Cap.ROUND);

mPath = new Path();

mBgBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.test5);

mFgBitmap = Bitmap.createBitmap(mBgBitmap.getWidth(),mBgBitmap.getHeight(),Bitmap.Config.ARGB_8888);

mCanvas = new Canvas(mFgBitmap);

mCanvas.drawColor(Color.GRAY);

}

@Override

public boolean onTouchEvent(MotionEvent event) {

switch(event.getAction()){

case MotionEvent.ACTION_DOWN:

mPath.reset();

mPath.moveTo(event.getX(),event.getY());

break;

case MotionEvent.ACTION_MOVE:

mPath.lineTo(event.getX(),event.getY());

break;

}

mCanvas.drawPath(mPath,mPaint);

invalidate();

return true;

}

}

Xfermode有三个子类 :

AvoidXfermode 指定了一个颜色和容差,强制Paint避免在它上面绘图(或者只在它上面绘图)。

PixelXorXfermode 当覆盖已有的颜色时,应用一个简单的像素异或操作。

PorterDuffXfermode 这是一个非常强大的转换模式,使用它,可以使用图像合成的16条Porter-Duff规则的任意一条来控制Paint

如何与已有的Canvas图像进行交互。

从上面我们可以看到PorterDuff.Mode为枚举类,一共有16个枚举值:

1.PorterDuff.Mode.CLEAR

所绘制不会提交到画布上。

2.PorterDuff.Mode.SRC

显示上层绘制图片

3.PorterDuff.Mode.DST

显示下层绘制图片

4.PorterDuff.Mode.SRC_OVER

正常绘制显示,上下层绘制叠盖。

5.PorterDuff.Mode.DST_OVER

上下层都显示。下层居上显示。

6.PorterDuff.Mode.SRC_IN

取两层绘制交集。显示上层。

7.PorterDuff.Mode.DST_IN

取两层绘制交集。显示下层。

8.PorterDuff.Mode.SRC_OUT

取上层绘制非交集部分。

9.PorterDuff.Mode.DST_OUT

取下层绘制非交集部分。

10.PorterDuff.Mode.SRC_ATOP

取下层非交集部分与上层交集部分

11.PorterDuff.Mode.DST_ATOP

取上层非交集部分与下层交集部分

12.PorterDuff.Mode.XOR

异或:去除两图层交集部分

13.PorterDuff.Mode.DARKEN

取两图层全部区域,交集部分颜色加深

14.PorterDuff.Mode.LIGHTEN

取两图层全部,点亮交集部分颜色

15.PorterDuff.Mode.MULTIPLY

取两图层交集部分叠加后颜色

16.PorterDuff.Mode.SCREEN

取两图层全部区域,交集部分变为透明色

691c812eeed7c1671953e038281d8c42.png

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持PHP中文网。

更多Android刮刮卡效果实现代码相关文章请关注PHP中文网!

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值