在淘宝、京东等电商举办活动的时候,常常能够看到在移动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对象实现“刮刮乐”效果的更多相关文章

  1. Android 撕衣服(刮刮乐游戏)

    项目简单介绍: 该项目为撕衣服,相似刮刮乐游戏 具体介绍: 用户启动项目后.载入一张图片,当用户点击图片的时候,点击的一片区域就会消失.从而显示出在这张图片以下的图片 这个小游戏相似与刮奖一样,刮开涂 ...

  2. 【Android - 自定义View】之自定义View实现“刮刮卡”效果

    首先来介绍一下这个自定义View: (1)这个自定义View的名字叫做 GuaguakaView ,继承自View类: (2)这个View实现了很多电商项目中的“刮刮卡”的效果,即用户可以刮开覆盖层, ...

  3. android 界面设计基本知识Ⅱ

    上一章讲述了Android界面设计时,一些基本控件的使用,本章主要讲述自定义控件,Fragment和Headler线程机制. 1.自定义控件 (1)基本知识 dp.sp和dx      px:像素点  ...

  4. HTML5 CSS3 诱人的实例 :canvas 模拟实现电子彩票刮刮乐

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/34089553 今天给大家带来一个刮刮乐的小例子~基于HTML5 canvas的, ...

  5. Android 自定义控件实现刮刮卡效果 真的就只是刮刮卡么

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40162163 , 本文出自:[张鸿洋的博客] 很久以前也过一个html5的刮刮卡 ...

  6. Android项目刮刮奖详解(四)

    Android项目刮刮奖详解(三) 前言 上一期我们已经是完成了刮刮卡的基本功能,本期就是给我们的项目增加个功能以及美化一番 目标 增加功能 用户刮卡刮到一定程度的时候,清除遮盖层 在遮盖层放张图片, ...

  7. canvas刮刮卡

    <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content ...

  8. Android 自己定义控件实现刮刮卡效果 真的就仅仅是刮刮卡么

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40162163 , 本文出自:[张鸿洋的博客] 非常久以前也过一个html5的刮刮 ...

  9. canvas刮刮乐效果(pc端&H5、zepto-touchmove)

    一.html <div id="canvasArea" style="width:300px;height:200px;position:relative;&quo ...

随机推荐

  1. C++静态库与动态库(简介)

    C++静态库与动态库 这次分享的宗旨是——让大家学会创建与使用静态库.动态库,知道静态库与动态库的区别,知道使用的时候如何选择.这里不深入介绍静态库.动态库的底层格式,内存布局等,有兴趣的同学,推荐一 ...

  2. 【转】 UIButton上使用UIEdgeInsetsMaketitle跟图片对齐

    [转]http://blog.csdn.net/yanxiaoqing/article/details/7230660 默认情况下,不设置的效果,都使居中现实,button为150*150 使用以下设 ...

  3. jni note

    2016-1-15 javah 使用javah可以自动从java文件生成jni头文件, 用法:javah [选项] <类> 其中 [选项] 包括:         -help        ...

  4. sql like 通配符 模糊查询技巧及特殊字符

    最近碰到like模糊匹配的问题,找到一些答案接触迷惑,觉得有知识是自己忽略的,现在整理出来,既强化记忆,又是一次记录,以下转自一篇Blog,关于sql server like的通配符和字符带通配符的处 ...

  5. http://docs.aliyun.com/#/rds/best-practices/collocation&security

    http://docs.aliyun.com/#/rds/best-practices/collocation&security

  6. openNebulafrontEnd ComputeNode 配置记录

    1,OpenNebula nfs(file system shared) for image datastore;

  7. Ignatius and the Princess III(母函数)

    Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ...

  8. 三维CAD塑造——基于所述基本数据结构一半欧拉操作模型

    三维CAD塑造--基于所述基本数据结构一半欧拉操作模型(elar, B_REP) (欧拉操作  三维CAD建模课程 三维CAD塑造 高曙明老师  渲染框架 brep 带洞 带柄 B_REP brep ...

  9. 采用proguard困惑android代码

    当前是有些工具比方apktool,dextojar等是能够对我们android安装包进行反编译.获得源代码的.为了降低被别人破解,导致源代码泄露,程序被别人盗代替码,等等.我们须要对代码进行混淆.an ...

  10. .wsdl文件生成.cs文件

    1.打开VS文件命令行工具(一般在安装文件的Common7\Tools\Shortcuts下面例如[E:\VS2013安装程序\Common7\Tools\Shortcuts\VS2013 x64 本 ...