赵雅智_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 ...
随机推荐
- POJ 1315 Don't Get Rooked
Don't Get Rooked Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 2086 Accepted: 1325 ...
- POJ 2181 Jumping Cows
Jumping Cows Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6398 Accepted: 3828 Desc ...
- Multiset ------ 多重集合
Multiset的中文名是多重集合,其实就是集合的扩展版.唯一的不同是集合中一个值只能出现一次,而多重集合中一个值可以出现多次. 粗略看了看MSDN,在STL中,multiset和set的成员函数声明 ...
- HDU——1205吃糖果(鸽巢原理)
吃糖果 Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Submis ...
- BZOJ4819 [Sdoi2017]新生舞会 【01分数规划 + 费用流】
题目 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买一个男生和一个女生一起跳舞,互为舞伴.Cathy收集了这些同学之间的关系,比如两个人 ...
- Server-Side Rendering(服务端渲染)的优点与缺点
优点 1. SEO 客户端渲染,页面中只有初始的几个html容器,js生成内容填充到容器中,爬虫只能识别到初始的html容器,js生成的内容一般不会被识别,而服务端渲染直接给出html,爬虫可以识别到 ...
- 学习 WebService 第三步:一个简单的实例(RAD+WAS 8.5开发SOAP项目)
[开发环境] Web Service 服务器端开发工具:RAD(Eclipse内核) Web Service 服务器:IBM WebSphere v8.5 REST/SOAP:SOAP(JAX-WS/ ...
- eclipse testng插件安装
1.安装Testng 在Eclipse中,点击Help→Install new software→点击Add,在location中输入http://beust.com/eclipse ,选择TestN ...
- poj 2724 Purifying Machine
Purifying Machine Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 5408 Accepted: 1575 ...
- POJ1167 The Buses
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6234 Accepted: 1698 Description A man ...