PorterDuffXfermode ——实现刮刮卡效果
来源:互联网 发布:数据库分页查询sql语句 编辑:程序博客网 时间:2024/06/07 15:40
利用PorterDuffXfermode实现,图例如下,需要注意的是,PorterDuffXfermode设置的是两个图层交集区域的显示方式,dst是先画的图形,src是后画的图形。
其中最常用的就是通过DST_IN,SRC_IN模式来实现将一个矩形图片编程圆角图片或者圆形图片的效果。先利用一个普通画笔画一个Mask遮罩层,再用带PorterDuffXfermode的画笔讲图像画在遮罩层上,这样就可以通过上面所说的效果来混合两个图像了。
mBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.test); mOut = Bitmap.createBitmap(mBitmap.getWidth(), mBitmap.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(mOut); paint = new Paint(); paint.setAntiAlias(true); canvas.drawRoundRect(0, 0, mBitmap.getWidth(), mBitmap.getHeight(), 80, 80, paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); canvas.drawBitmap(mBitmap,0,0,paint);
下面实现刮刮卡效果,如下图
完整代码如下:
package com.example.administrator.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.PorterDuff;import android.graphics.PorterDuffXfermode;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;/** * Created by Administrator on 2015/11/25 0025. */public class XfermodeView extends View { Bitmap mBgBitmap,mFgBitmap; Paint mPaint; Canvas mCanvas; Path mPath; public XfermodeView(Context context) { super(context); init(); } public XfermodeView(Context context, AttributeSet attrs) { super(context, attrs); init(); }/** 让它的笔触和连接处能更加圆滑一点,即Paint.Join.ROUND和Paint.Cap.ROUND属性* 最关键的一步是:需要将画笔的透明度设置为0,这样才能显示出擦除的效果,因为在使用PorterDuffXfermode进行图层混合时,并不是简单地进行图层的计算,同时也会去计算透明度通道的值**/ 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.test); 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; } @Override protected void onDraw(Canvas canvas) { canvas.drawBitmap(mBgBitmap,0,0,null); canvas.drawBitmap(mFgBitmap,0,0,null); }}
0 0
- PorterDuffXfermode ——实现刮刮卡效果
- PorterDuffXfermode 实现刮刮卡效果
- PorterDuffXfermode实现刮刮卡效果
- PorterDuffXfermode实现Android刮刮卡效果
- Android使用PorterDuffXfermode实现遮罩效果
- Android 自定义View之PorterDuffXfermode的使用(刮刮卡的效果实现)
- 自定义View通过PorterDuffXfermode实现图片遮罩效果
- 自定义View——PorterDuffXfermode
- 自定义view之PorterDuffXfermode实现刮刮卡
- android之刮刮卡中奖效果PorterDuffXfermode与paint属性详解
- 安卓类——PorterDuffXfermode图像合成类
- 使用PorterDuffXfermode实现遮罩层
- 使用PorterDuffXfermode实现遮罩层
- PorterDuffXfermode
- PorterDuffXfermode
- PorterDuffXfermode
- 初学PorterDuffXfermode(实现刮刮乐)
- 关于PorterDuffXferMode效果出不来的问题
- AlertDialog分析
- 17个提升iOS开发效率的必用工具
- codeforces-242A-Heads or Tails【暴力】
- Java程序员们最常犯的10个错误
- Android开发笔记(一)像素的单位
- PorterDuffXfermode ——实现刮刮卡效果
- ffmpeg cmd 基本用法
- iOS 蓝牙开发 BabyBluetooth蓝牙库介绍
- Windows 窗口层次关系
- 利用Cocoa Layout Instrument检视自动布局
- logback探究
- 【HTML&JavaScript】data-* 属性与data( )方法
- java字符转义和替换
- 统计项目中图片使用情况