【Android界面实现】使用Canvas对象实现“刮刮乐”效果
在淘宝、京东等电商举办活动的时候,常常能够看到在移动client推出的各种刮奖活动,而这样的活动也受到了非常多人的喜爱。从client的体验来说,这样的效果应该是通过网页来实现的,那么,我们使用Android的自带控件能不能实现这样的刮刮乐的效果呢?当然能够,本篇文章将介绍使用Canvas这个对象,怎样实现“刮刮乐”的效果。
先看效果图
以下我们看一下怎样使用代码实现
布局文件
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" > <ImageView
android:id="@+id/after"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/a" /> <ImageView
android:id="@+id/before"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/b" /> </FrameLayout>
Activity代码
public class MainActivity extends Activity implements OnTouchListener { private ImageView imgafter;
private ImageView imgbefore;
private Canvas canvas;
private Paint paint;
private Bitmap bitmap;
private Bitmap before;
private Bitmap after; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); imgafter = (ImageView) findViewById(R.id.after);
imgbefore = (ImageView) findViewById(R.id.before); // 获得图片
after = BitmapFactory.decodeResource(getResources(), R.drawable.a);
before = BitmapFactory.decodeResource(getResources(), R.drawable.b); imgafter.setImageBitmap(after);
imgbefore.setImageBitmap(before);
// 创建能够改动的空白的bitmap
bitmap = Bitmap.createBitmap(before.getWidth(), before.getHeight(),
before.getConfig());
imgbefore.setOnTouchListener(this);
paint = new Paint();
paint.setStrokeWidth(5);
paint.setColor(Color.BLACK);
// 创建画布
canvas = new Canvas(bitmap);
canvas.drawBitmap(before, new Matrix(), paint);
} @Override
public boolean onTouch(View arg0, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
int newX = (int) event.getX();
int newY = (int) event.getY();
// 将滑过的地方变为透明
for (int i = -10; i < 10; i++) {
for (int j = -10; j < 10; j++) {
if ((i + newX) >= before.getWidth()
|| j + newY >= before.getHeight() || i + newX < 0
|| j + newY < 0) {
return false;
}
bitmap.setPixel(i + newX, j + newY, Color.TRANSPARENT);
}
}
imgbefore.setImageBitmap(bitmap);
break;
}
return true;
}
}
能够看到。代码非常easy。几十行代码就实现了简单的“刮刮乐”的效果。
原理是这种,一開始两张图片重叠。显示的还没有刮开的效果。
在Activity的onTouch方法中,我们对滑动事件进行监听。当用户用手指滑动屏幕的时候,我们将滑过的画布部分的颜色设置为透明,同一时候,把改变之后的bitmap对象设置为ImageView的背景,这样,隐藏在后面的图片就显示出来了,也就实现了刮刮乐的效果。
【Android界面实现】使用Canvas对象实现“刮刮乐”效果的更多相关文章
- Android 撕衣服(刮刮乐游戏)
项目简单介绍: 该项目为撕衣服,相似刮刮乐游戏 具体介绍: 用户启动项目后.载入一张图片,当用户点击图片的时候,点击的一片区域就会消失.从而显示出在这张图片以下的图片 这个小游戏相似与刮奖一样,刮开涂 ...
- 【Android - 自定义View】之自定义View实现“刮刮卡”效果
首先来介绍一下这个自定义View: (1)这个自定义View的名字叫做 GuaguakaView ,继承自View类: (2)这个View实现了很多电商项目中的“刮刮卡”的效果,即用户可以刮开覆盖层, ...
- android 界面设计基本知识Ⅱ
上一章讲述了Android界面设计时,一些基本控件的使用,本章主要讲述自定义控件,Fragment和Headler线程机制. 1.自定义控件 (1)基本知识 dp.sp和dx px:像素点 ...
- HTML5 CSS3 诱人的实例 :canvas 模拟实现电子彩票刮刮乐
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/34089553 今天给大家带来一个刮刮乐的小例子~基于HTML5 canvas的, ...
- Android 自定义控件实现刮刮卡效果 真的就只是刮刮卡么
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40162163 , 本文出自:[张鸿洋的博客] 很久以前也过一个html5的刮刮卡 ...
- Android项目刮刮奖详解(四)
Android项目刮刮奖详解(三) 前言 上一期我们已经是完成了刮刮卡的基本功能,本期就是给我们的项目增加个功能以及美化一番 目标 增加功能 用户刮卡刮到一定程度的时候,清除遮盖层 在遮盖层放张图片, ...
- canvas刮刮卡
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content ...
- Android 自己定义控件实现刮刮卡效果 真的就仅仅是刮刮卡么
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40162163 , 本文出自:[张鸿洋的博客] 非常久以前也过一个html5的刮刮 ...
- canvas刮刮乐效果(pc端&H5、zepto-touchmove)
一.html <div id="canvasArea" style="width:300px;height:200px;position:relative;&quo ...
随机推荐
- Zend Studio 12 大集合
前言 本文记录了我个人使用Zend Studio 12的点点滴滴,不定时更新. 内容来源于网络,如有侵权,告知后可删除. 下载 官方链接点击链接,填入相关信息即可下载. 破解 声明:请购买正版,非万不 ...
- pickle模块
在编程中,如果存在大的列表或者字典,可以在python中引入pickle 模块: 例如:将下边这组列表保存到文件当中:[1, 2, 'xiaomao', '小狗'] 程序: import pickle ...
- 给进程分配cpu核心
新负责的程序采用生产者和消费者的模式,生产者的速度非常快,数据几乎都在内存里,处理起来很快.而消费者要频繁的I/O.所以打算给生产者和消费者分配不一样的核心. 生产者只需要一个核心就够了,其余分配给消 ...
- MFC上下浮动与渐入渐出消息提示框实现
类似QQ与360软件,消息提示有两种.上下浮动.渐入渐出. 1.上下浮动提示框实现 机制,定时器响应上下浮动消息. 主要API:MoveWindow. 源码如下UpDownTipDlg.h.UpDow ...
- HDU 5809 Ants(KD树+并查集)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5809 [题目大意] 给出一些蚂蚁和他们的巢穴,一开始他们会在自己的巢穴(以二维坐标形式给出),之后 ...
- [虚拟化/云] kvm的架构分析
预备知识 1. 客户机物理页框到宿主机虚拟地址转换 http://blog.csdn.net/zhuriyuxiao/article/details/8968781 http://www.tuicoo ...
- lodash中_.set的用法
_.set(object, path, value) # Ⓢ Ⓣ Ⓝ 设置对象的路径上的属性值.如果路径不存在,则创建它. 参数 1.object (Object): 待扩大的对象. 2.path ( ...
- android插件化-apkplugdemo源代码阅读指南-10
阅读本节内容前可先了解 apkplug基础教程 本教程是基于apkplug V1.6.8 版本号编写 最新开发方式以官网为准 可下载最新的apkplugdemo源代码http://git.oschi ...
- HTML之学习笔记(十)表单元素
html表单元素的基本格式为(必须包含在form标签中)
- IOS开发——正则表达式验证手机号、密码
App的实际应用中,用户登陆功能基本是每个App都有需求的一个功能.而当前我们很常规的做法,就是让用户把手机号作为自己的用户名,而在注册获取短信验证码的过程中,我们首先要完成的一个步骤,就是校验用户的 ...