【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 ...
随机推荐
- verilog中阻塞复制,非阻塞复制,顺序块,并行块之间的关系
这几个概念是不一样的 顺序块:顺序块中的语句是按顺序执行的,每条语句中的延迟值是与其前一条语句执行的仿真时间有关. 并行块:并行块语句是并行执行的,它里面的每条语句中指定的延迟值都是相对于语句块开始执 ...
- C++设计模式之命令模式
厨师类: #include "Cooker.h" Cooker::Cooker(void) { } Cooker::~Cooker(void) { } void Cooker::M ...
- Linux----mktemp命令的用法
命令说明: mktemp命令用于临时文件和临时目录.它的主要特点就是可以做到每次执行mktemp时产生文件和目录都不重名: 这个特性就保证了多个session执行同一脚本都是安全的. 命令用法: 格式 ...
- [笔记]线性回归&梯度下降
一.总述 线性回归算法属于监督学习的一种,主要用于模型为连续函数的数值预测. 过程总得来说就是初步建模后,通过训练集合确定模型参数,得到最终预测函数,此时输入自变量即可得到预测值. 二.基本过程 1. ...
- iso-开发基础知识-1-程序流程
main-应用程序委托-视图控制器 main()---主函数 应用程序委托 ---AppDelegate 视图控制器 ---ViewController - (BOOL)applicatio ...
- 达内TTS6.0课件oop_day02
- C#中var关键字【转】
[转]http://blog.csdn.net/courageously/article/details/5695626 var关键字是C# 3.0开始新增的特性,称为推断类型 . 可以赋予局部变量推 ...
- WPF-MVC开发模式简要介绍
1, 建立WPF程序,并在程序中添加三个文件View,ViewMoudle,Moudle, 2,Moudle文件加中添加类,此文件夹中存放的类基本为数据类,主要是字段和属性 3 ViewMoudle文 ...
- wcf xml消息客户端cookie
public override bool Login(string userName, string password) { using (HttpClient client = new HttpCl ...
- C++_知识点_结构体/枚举/联合
//C++中结构体的不同之处 #include <iostream> #include <string> using namespace std; int main(void) ...