赵雅智_Android案例_刮刮乐
实现效果
主要代码
<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/img_info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/b" /> <ImageView
android:id="@+id/img_surface"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/a" /> </FrameLayout>
注意:图片位置不要设置,表面图片要大于底层图片
MainActivity.java
package com.example.guaguale; import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView; /**
* 刮刮乐
*
* @author zhaoyazhi
*
* 2014-6-18
*/
public class MainActivity extends Activity implements OnTouchListener { private Canvas canvas;
private Paint paint;
private Bitmap bitmap;
private ImageView imgInfo;
private ImageView imgSurface;
private Bitmap bSurface;// 没有刮开的表面图片
private Bitmap bInfo;// 刮开后的显示内容 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); imgSurface = (ImageView) findViewById(R.id.img_surface);
imgInfo = (ImageView) findViewById(R.id.img_info); // 获得图片
// 參数1:res是资源的引用,參数2:id是图片的id
bSurface = BitmapFactory.decodeResource(getResources(), R.drawable.a);
bInfo = BitmapFactory.decodeResource(getResources(), R.drawable.b); // 设置图片
imgSurface.setImageBitmap(bSurface);
imgInfo.setImageBitmap(bInfo); // 创建能够改动的空白的bitmap
bitmap = Bitmap.createBitmap(bSurface.getWidth(), bSurface.getHeight(),
bSurface.getConfig()); // 设置屏幕触摸事件
imgSurface.setOnTouchListener(this); // 创建画笔
paint = new Paint(); // 创建画布
canvas = new Canvas(bitmap);
canvas.drawBitmap(bSurface, new Matrix(), paint);
} /**
* 用户触摸屏幕时候的事件
*/
@Override
public boolean onTouch(View view, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
int newX = (int) event.getX();
int newY = (int) event.getY();
// i ,j每个透明单位的大小
for (int i = -10; i < 10; i++) {
for (int j = -10; j < 10; j++) {
//图片之外的区域
if ((i + newX) >= bSurface.getWidth()
|| j + newY >= bSurface.getHeight() || i + newX < 0
|| j + newY < 0) {
return false;
}
//将滑过的地方变为透明
bitmap.setPixel(i + newX, j + newY, Color.TRANSPARENT);
}
}
//设置透明区域
imgSurface.setImageBitmap(bitmap);
break;
}
return true;
}
}
涉及知识点
getResources()
http://blog.csdn.net/zhaoyazhi2129/article/details/32077513
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhemhpMjEyOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
setImageBitmap
http://blog.csdn.net/zhaoyazhi2129/article/details/32080827
paint画笔
http://blog.csdn.net/zhaoyazhi2129/article/details/32090187
canvas画布
http://blog.csdn.net/zhaoyazhi2129/article/details/32098477
bitmap
赵雅智_Android案例_刮刮乐的更多相关文章
- 赵雅智_Android的getResources()资源引用
今天做一个Android的刮刮乐项目.里面用到非常多的地方用到了getResources. <span style="font-size:12px;"> // 获得图片 ...
- 赵雅智_Android编码规范
凝视 导入mycodetemplates.xml统一凝视样式 须要加凝视的地方 类凝视(必加) 方法凝视(必加) 块凝视主要是数据结构和算法的描写叙述(必加) 类成员变量和常量凝视(选择性加入) 单行 ...
- 赵雅智_android多线程下载带进度条
progressBar说明 在某些操作的进度中的可视指示器,为用户呈现操作的进度,还它有一个次要的进度条,用来显示中间进度,如在流媒体播放的缓冲区的进度. 一个进度条也可不确定其进度.在不确定模式下, ...
- 赵雅智_android获取本机运营商,手机号部分能获取
手机号码不是全部的都能获取.仅仅是有一部分能够拿到. 这个是因为移动运营商没有把手机号码的数据写入到sim卡中.SIM卡仅仅有唯一的编号.供网络与设备 识别那就是IMSI号码,手机的信号也能够说是通过 ...
- 赵雅智:android教学大纲
带下划线为详细内容链接地址.点击后可跳转.希望给大家尽一些微薄之力.眼下还在整理中 教学章节 教学内容 学时安排 备注 1 Android高速入门 2 Android模拟器与常见命令 3 Androi ...
- 赵雅智_Swift(4)_断言
可选能够让你推断值是否存在.你能够在代码中优雅地处理值缺失的情况.然而,在某些情况下,假设值缺失或者值并不满足特定的条件.你的代码可能并不须要继续执行.这时.你能够在你的代码中触发一个断言(asser ...
- 赵雅智_使用SQLiteDatabase操作SQLite数据库及事务
知识点具体解释:http://blog.csdn.net/zhaoyazhi2129/article/details/9025995 详细代码: MainActivity.java package c ...
- 赵雅智_运用Bitmap和Canvas实现图片显示,缩小,旋转,水印
上一篇已经介绍了Android种Bitmap和Canvas的使用,以下我们来写一个详细实例 http://blog.csdn.net/zhaoyazhi2129/article/details/321 ...
- 赵雅智:service_startService生命周期
案例演示 布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xm ...
随机推荐
- 一个TensorFlow例子
一个TensorFlow的例子 import tensorflow as tf x = tf.constant(1.0, name='input') w = tf.Variable(0.8, name ...
- DS博客作业06—图
1.本周学习总结 1.1思维导图 1.2学习体会 2.PTA实验作业 2.1 图着色问题 图着色问题是一个著名的NP完全问题.给定无向图G=(V,E),问可否用K种颜色为V中的每一个顶点分配一种颜色, ...
- 九度oj 题目1455:珍惜现在,感恩生活
题目描述: 为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品,其价格不等,并且只能整袋购买.请问:你用有限的资金最 ...
- Vmware占用宿主机硬盘越来越大
Vmware占用宿主机硬盘越来越大 root /usr/bin/vmware-toolbox-cmd disk shrink /
- 简单实用jstl实现代码编写
package com.ceshi; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.s ...
- 用meta标签让网页用360打开时默认为极速模式
最近做项目,用360浏览器访问自己的本地网页,发现都是默认在兼容模式下打开,做的淡入淡出轮播效果在兼容模式下看时,感觉切换很生硬.百度,发现360官网帮助里有说明用meta标签控制浏览器内核,网址为h ...
- 微信小程序页面跳转传参
1.传递参数方法 使用navigatior组件 <navigator url="/pages/pull/pull?title=lalla&name=cc" hov ...
- Android多媒体访问
Android的多媒体文件主要存储在/data/data/com.android.providers.media/databases目录下,该目录下有两个db文件,一个是内部存储数据库文件(inter ...
- Red is good(bzoj 1419)
Description 桌面上有R张红牌和B张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到1美元,黑牌则付出1美元.可以随时停止翻牌,在最优策略下平均能得到多少钱. Input 一 ...
- APUE 学习笔记(四) 标准I/O库
1.流与FILE对象 unix I/O系统调用都是针对文件描述符的 标准C的I/O函数都是针对流(文件指针)的,我们使用一个流与一个文件相关联 2.缓冲 标准I/O库提供缓冲的目的就是尽可能减少r ...