android刮刮乐游戏布局,Android studio实现刮刮乐的方法

本文实例为大家分享了android studio实现刮刮乐的具体代码,供大家参考,具体内容如下

mainactivity

public class mainactivity extends appcompatactivity {

@override

protected void oncreate(bundle savedinstancestate) {

super.oncreate(savedinstancestate);

setcontentview(r.layout.activity_main);

}

}

第一种方法:

guatwo

public class guatwo extends view {

/*第一种方法*/

private path mpath;//手刮动的path,过程

private paint moutterpaint;//绘制mpath的画笔

private canvas mcanvas;//临时画布

private bitmap mbitmap;//临时图片

//记录用户path每次的开始坐标值

private int mlastx;

private int mlasty;

private bitmap moutterbitmap;//图片遮罩,就是手刮动,要擦掉的那张图

public guatwo(context context) {

this(context, null);

}

public guatwo(context context, attributeset attrs) {

this(context, attrs, 0);

}

public guatwo(context context, attributeset attrs, int defstyle) {

super(context, attrs, defstyle);

init();

}

@override

protected void onmeasure(int widthmeasurespec, int heightmeasurespec) {

super.onmeasure(widthmeasurespec, heightmeasurespec);

//获得控件的宽高

int width = getmeasuredwidth();

int height = getmeasuredheight();

//初始化bitmap

mbitmap = bitmap.createbitmap(width, height, bitmap.config.argb_8888);

mcanvas = new canvas(mbitmap);

//设置画笔属性

setupoutpaint();

mcanvas.drawcolor(color.parsecolor("#c0c0c0"));

}

@override

protected void ondraw(canvas canvas) {

moutterpaint.setstyle(paint.style.stroke);

moutterpaint.setxfermode(new porterduffxfermode(porterduff.mode.dst_out));//mode.dst_out改模式就类似橡皮檫,这个属性设置是关键

canvas.drawbitmap(moutterbitmap, 0, 0, null);

canvas.drawbitmap(mbitmap, 0, 0, null);

mcanvas.drawpath(mpath, moutterpaint);

}

@override

public boolean ontouchevent(motionevent event) {

int action = event.getaction();

int x = (int) event.getx();

int y = (int) event.gety();

switch (action) {

case motionevent.action_down://按下

//记录按下的时候的x和y值,以便于之后移动的时候绘制

mlastx = x;

mlasty = y;

mpath.moveto(mlastx, mlasty);

break;

case motionevent.action_move://移动

//拿到用户移动的x绝对值,y轴绝对值

int dx = math.abs(x - mlastx);

int dy = math.abs(y - mlasty);

//用户滑动超过3像素才会改变,这个可以不做,做只是为了避免很频繁的响应而已。

if (dx > 3 || dy > 3) {

mpath.lineto(x, y);

}

mlastx = x;

mlasty = y;

break;

}

invalidate();//刷新ui

return true;

}

/**

* 绘制path(也就是手刮动的path来绘制) 的画笔属性

* 类似橡皮擦

*/

private void setupoutpaint() {

moutterpaint.setcolor(color.red);

moutterpaint.setantialias(true);

moutterpaint.setdither(true);

moutterpaint.setstrokejoin(paint.join.round);//设置圆角

moutterpaint.setstrokecap(paint.cap.round);

moutterpaint.setstyle(paint.style.fill);

moutterpaint.setstrokewidth(60);//设置画笔宽度

}

/**

* 初始化信息

*/

private void init() {

moutterpaint = new paint();

mpath = new path();

moutterbitmap = bitmapfactory.decoderesource(getresources(),

r.drawable.mein);

}

第二种方法:

guatwo

private path mpath;//手刮动的path,过程

private paint moutterpaint;//绘制mpath的画笔

private canvas mcanvas;

private bitmap mbitmap;

//记录用户path每次的开始坐标值

private int mlastx;

private int mlasty;

private bitmap moutterbitmap;//图片遮罩,就是手刮动,要擦掉的那张图

private string mtext;//刮奖文本信息

private rect mtextbound;

private paint mbackpaint;//刮奖信息的画笔

public guatwo(context context) {

this(context, null);

}

public guatwo(context context, attributeset attrs) {

this(context, attrs, 0);

}

public guatwo(context context, attributeset attrs, int defstyle) {

super(context, attrs, defstyle);

init();

}

@override

protected void onmeasure(int widthmeasurespec, int heightmeasurespec) {

super.onmeasure(widthmeasurespec, heightmeasurespec);

//获得控件的宽高

int width = getmeasuredwidth();

int height = getmeasuredheight();

//初始化bitmap

mbitmap = bitmap.createbitmap(width, height, bitmap.config.argb_8888);

mcanvas = new canvas(mbitmap);//用指定的位图构造一个画布来绘制。

//设置画笔属性

setupoutpaint();

setupbackpaint();

// mcanvas.drawcolor(color.parsecolor("#c0c0c0"));

mcanvas.drawroundrect(new rectf(0, 0, width, height), 30, 30,

moutterpaint);//用moutterpaint画圆角矩形

mcanvas.drawbitmap(moutterbitmap, null, new rect(0, 0, width, height),

null);//在刚刚画的圆角矩形上面再画一个bitmap图片,让图片大小和圆角矩形大小相关联

}

@override

protected void ondraw(canvas canvas) {

moutterpaint.setstyle(paint.style.stroke);

moutterpaint.setxfermode(new porterduffxfermode(porterduff.mode.dst_out));//mode.dst_out改模式就类似橡皮檫,这个属性设置是关键

canvas.drawtext(mtext, (getwidth() - mtextbound.width()) / 2, getheight() / 2 - mtextbound.height() / 2, mbackpaint);//把获奖信息放在正中间

mcanvas.drawpath(mpath, moutterpaint);

canvas.drawbitmap(mbitmap, 0, 0, null);

}

@override

public boolean ontouchevent(motionevent event) {

int action = event.getaction();

int x = (int) event.getx();

int y = (int) event.gety();

switch (action) {

case motionevent.action_down://按下

//记录按下的时候的x和y值,以便于之后移动的时候绘制

mlastx = x;

mlasty = y;

mpath.moveto(mlastx, mlasty);

break;

case motionevent.action_move://移动

//拿到用户移动的x绝对值,y轴绝对值

int dx = math.abs(x - mlastx);

int dy = math.abs(y - mlasty);

//用户滑动超过3像素才会改变,这个可以不做,做只是为了避免很频繁的相应而已。

if (dx > 3 || dy > 3) {

mpath.lineto(x, y);

}

mlastx = x;

mlasty = y;

break;

}

invalidate();//刷新ui

return true;

}

private void setupbackpaint() {

mbackpaint.setcolor(color.red);

mbackpaint.setstyle(paint.style.fill);

mbackpaint.settextsize(60);

//获得当前画笔绘制文本的宽和高

mbackpaint.gettextbounds(mtext, 0, mtext.length(), mtextbound);

}

*//**

* 绘制path(也就是手刮动的path来绘制) 的画笔属性

* 类似橡皮擦

*//*

private void setupoutpaint() {

moutterpaint.setcolor(color.red);

moutterpaint.setantialias(true);

moutterpaint.setdither(true);

moutterpaint.setstrokejoin(paint.join.round);//设置圆角

moutterpaint.setstrokecap(paint.cap.round);

moutterpaint.setstyle(paint.style.fill);

moutterpaint.setstrokewidth(60);//设置画笔宽度

}

*//**

* 初始化信息

*//*

private void init() {

moutterpaint = new paint();

mpath = new path();

moutterbitmap = bitmapfactory.decoderesource(getresources(),

r.drawable.huahua);

mtext = "您中奖了!";

mtextbound = new rect();

mbackpaint = new paint();

}

布局文件

xml文件:

xmlns:tools="http://schemas.android.com/tools"

android:id="@+id/activity_main"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:paddingbottom="@dimen/activity_vertical_margin"

android:paddingleft="@dimen/activity_horizontal_margin"

android:paddingright="@dimen/activity_horizontal_margin"

android:paddingtop="@dimen/activity_vertical_margin"

tools:context="com.bwie.test.guaguale.mainactivity">

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值