该功能实现很简单,就是根据手指坐标位置在画板上画
![]()
仿刮刮乐刮奖效果 1.效果图 2.代码实现 ![]()
仿刮刮乐刮奖效果 1.效果图 2.代码实现
public class erinieshow extends relativelayout {
context context;
relativelayout bg;
myview myview;
int level;
public erinieshow(context context, int level) {
super(context);
this.context = context;
this.level = level;
bg = new relativelayout(context);
myview = new myview(context);
bg.addview(myview);
addview(bg);
int[] resolution = phoneutil.getresolution(context);
relativelayout.layoutparams params = new relativelayout.layoutparams(
resolution[0], phoneutil.getfitheight(context, 125));
bg.setid(100001);
bg.setlayoutparams(params);
myview.setlayoutparams(params);
switch (level) {
case 0:
bg.setbackgroundresource(r.drawable.rewardlevel0);
break;
case 1:
bg.setbackgroundresource(r.drawable.rewardlevel1);
case 2:
bg.setbackgroundresource(r.drawable.rewardlevel2);
default:
bg.setbackgroundresource(r.drawable.rewardlevel3);
}
myview.init(color.parsecolor("#d3d3d3"), 30, 10);
}
}
public class myview extends textview {
private float touch_tolerance; // 填充距离,使线条更自然,柔和,值越小,越柔和。
private bitmap mbitmap;
private canvas mcanvas;
private paint mpaint;
private path mpath;
private float mx, my;
private boolean isdraw = false;
int time=0;
public myview(context context) {
@override
protected void ondraw(canvas canvas) {
super.ondraw(canvas);
if (isdraw) {
mcanvas.drawpath(mpath, mpaint);
canvas.drawbitmap(mbitmap, 0, 0, null);
/**
* 开启檫除功能
*
* @param bgcolor
* 覆盖的背景颜色
* @param paintstrokewidth
* 触点(橡皮)宽度
* @param touchtolerance
* 填充距离,值越小,越柔和。
*/
public void init(final int bgcolor, final int paintstrokewidth,
float touchtolerance) {
touch_tolerance = touchtolerance;
// 设置画笔
mpaint = new paint();
// mpaint.setalpha(0);
// 画笔划过的痕迹就变成透明色了
mpaint.setcolor(color.black); // 此处不能为透明色
mpaint.setxfermode(new porterduffxfermode(porterduff.mode.dst_out));
// 或者
// mpaint.setxfermode(new porterduffxfermode(porterduff.mode.dst_in));
mpaint.setantialias(true);
mpaint.setdither(true);
mpaint.setstyle(paint.style.stroke);
mpaint.setstrokejoin(paint.join.round); // 前圆角
mpaint.setstrokecap(paint.cap.round); // 后圆角
mpaint.setstrokewidth(paintstrokewidth); // 笔宽
// 痕迹
mpath = new path();
// 覆盖
layoutparams layoutparams = getlayoutparams();
int height = layoutparams.height;
int width;
if (getlayoutparams().width == layoutparams.match_parent) {
width = 700;
} else {
width = layoutparams.width;
mbitmap = bitmap.createbitmap(width, height, config.argb_8888);
mcanvas = new canvas(mbitmap);
mcanvas.drawcolor(bgcolor);
isdraw = true;
public boolean ontouchevent(motionevent event) {
if (!isdraw) {
return true;
switch (event.getaction()) {
case motionevent.action_down: // 触点按下
// touchdown(event.getrawx(),event.getrawy());
touchdown(event.getx(), event.gety());
invalidate();
case motionevent.action_move: // 触点移动
touchmove(event.getx(), event.gety());
case motionevent.action_up: // 触点弹起
touchup(event.getx(), event.gety());
return true;
private void touchdown(float x, float y) {
mpath.reset();
mpath.moveto(x, y);
mx = x;
my = y;
private void touchmove(float x, float y) {
float dx = math.abs(x - mx);
float dy = math.abs(y - my);
if (dx >= touch_tolerance || dy >= touch_tolerance) {
mpath.quadto(mx, my, (x + mx) / 2, (y + my) / 2);
mx = x;
my = y;
private void touchup(float x, float y) {
mpath.lineto(x, y);
mcanvas.drawpath(mpath, mpaint);