本文实例为大家分享了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" />

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

android刮刮乐游戏布局,Android studio实现刮刮乐的方法相关推荐

  1. android飞翔的小鸟游戏素材包_开心消消乐×愤怒的小鸟:为开心而战

    手机里总有那么一些游戏,是你一旦不小心打开,就完全停不下来的.在这份"一直玩一直爽游戏清单"里,绝对少不了开心消消乐和愤怒的小鸟的身影. 神奇的是,在2020的夏天,它们合体了!在 ...

  2. Android大作业跑酷游戏《Android studio》

    这是一款类似与天天酷跑的跑酷游戏. 下载:https://download.csdn.net/download/weixin_46409629/85486673

  3. android子view获取父布局,Android获取布局父ID(Android get layout parent id)

    Android获取布局父ID(Android get layout parent id) 我想知道View和ViewParent有什么区别? 我想获取ImageView父级的Id,但我不能这样做: m ...

  4. android 编译时解析xml布局,android – 在xml布局中引用build.gradle versionName属性

    根据 http://tools.android.com/tech-docs/new-build-system你可以直接从毕业生创造资源,所以放 android { ... defaultConfig ...

  5. android 在指定位置添加布局,Android 如何动态添加 View 并显示在指定位置。

    引子 最近,在做产品的需求的时候,遇到 PM 要求在某个按钮上添加一个新手引导动画,引导用户去点击.作为 RD,我哗啦啦的就写好相关逻辑了.自测完成后,提测,PM Review 效果. 看完后,PM ...

  6. android平台下拼图游戏设计,android 拼图游戏 源码下载

    [实例简介] [实例截图] [核心代码] package com.game.pintu; import java.util.ArrayList; import java.util.List; impo ...

  7. android软键盘顶部定义布局,Android 软键盘弹出时把原来布局顶上去的解决方法

    键盘弹出时,会将布局底部的导航条顶上去. 解决办法: 在mainfest.xml中,在和导航栏相关的activity中加: android:name=".filing.MainActivit ...

  8. android 4个布局,Android - 4种基本布局

    1.线性布局 LinearLayout:线性布局 android:orientation="horizontal" android:layout_width="match ...

  9. Android RadioGroup中横向 竖向布局RadioButton的问题

    RadioGroup默认的横向android:orientation="horizontal".竖向布局android:orientation="vertical&quo ...

最新文章

  1. 人人网 6.0 版申请页面随着滚动条拖动背景图片滚动出现的原理
  2. iOS - UIAlertController
  3. 利用window.navigator.userAgent判断当前是否微信内置浏览器
  4. c++ sleep函数_我们如何在C,C ++中控制/安排线程的执行?
  5. mysqlbinlog抽取某个表的信息
  6. kill -9 杀不死的进程处理办法
  7. Gantt - attachEvent所有事件(归类、索引)
  8. matlab中如何定义数组,matlab中如何定义一个数组为全局变量?
  9. 蓝筹股票会退市吗?什么是白马蓝筹股票?
  10. PAT-2021年春季乙级考试题解
  11. WIN10华硕解决无法调节电脑亮度
  12. 【Java】01 初识 Java
  13. 保护你的聊天隐私---“外挂式”加密软件设计思路
  14. peewee mysql_peewee基本使用
  15. php订单表设计,订单详情表,与,订单表 怎么做?
  16. jquery轮播插件
  17. ### Cause: java.sql.SQLIntegrityConstraintViolationException: Column ‘user_id‘ cannot be null
  18. 利用飞信自动发短信脚本
  19. linux文件强制保存,Vim 强制保存只读文件的方法
  20. Android Q 适配指南 让你少走一堆弯路

热门文章

  1. 生活感悟108句话(经典推荐)
  2. PTA乙级 1096 大美数——15分
  3. Redis追命连环问,你能回答到第几问?(上)Redis简介,数据类型及缓存雪崩缓存击穿缓存穿透
  4. 极限多标签学习综述(Extreme Multi-label Learning)
  5. Linux Shell脚本攻略 读书笔记
  6. 攻击者已利用ChatGPT编写恶意代码
  7. 游戏是怎么作出来的(一)
  8. 基于JavaSwing开发开发的打字软件(疯狂打字通)+论文 课程设计 大作业源码
  9. 梦幻鸿蒙市质检,《梦幻西游》手游第十七届武神坛开辟鸿蒙VS斜月三星_ 《梦幻西游》手游官网-人人都玩,无处不在...
  10. 嵌入式学习的方法你知道多少呢