实现效果

主要代码

<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

http://blog.csdn.net/zhaoyazhi2129/article/details/32136179

赵雅智_Android案例_刮刮乐的更多相关文章

  1. 赵雅智_Android的getResources()资源引用

    今天做一个Android的刮刮乐项目.里面用到非常多的地方用到了getResources. <span style="font-size:12px;"> // 获得图片 ...

  2. 赵雅智_Android编码规范

    凝视 导入mycodetemplates.xml统一凝视样式 须要加凝视的地方 类凝视(必加) 方法凝视(必加) 块凝视主要是数据结构和算法的描写叙述(必加) 类成员变量和常量凝视(选择性加入) 单行 ...

  3. 赵雅智_android多线程下载带进度条

    progressBar说明 在某些操作的进度中的可视指示器,为用户呈现操作的进度,还它有一个次要的进度条,用来显示中间进度,如在流媒体播放的缓冲区的进度. 一个进度条也可不确定其进度.在不确定模式下, ...

  4. 赵雅智_android获取本机运营商,手机号部分能获取

    手机号码不是全部的都能获取.仅仅是有一部分能够拿到. 这个是因为移动运营商没有把手机号码的数据写入到sim卡中.SIM卡仅仅有唯一的编号.供网络与设备 识别那就是IMSI号码,手机的信号也能够说是通过 ...

  5. 赵雅智:android教学大纲

    带下划线为详细内容链接地址.点击后可跳转.希望给大家尽一些微薄之力.眼下还在整理中 教学章节 教学内容 学时安排 备注 1 Android高速入门 2 Android模拟器与常见命令 3 Androi ...

  6. 赵雅智_Swift(4)_断言

    可选能够让你推断值是否存在.你能够在代码中优雅地处理值缺失的情况.然而,在某些情况下,假设值缺失或者值并不满足特定的条件.你的代码可能并不须要继续执行.这时.你能够在你的代码中触发一个断言(asser ...

  7. 赵雅智_使用SQLiteDatabase操作SQLite数据库及事务

    知识点具体解释:http://blog.csdn.net/zhaoyazhi2129/article/details/9025995 详细代码: MainActivity.java package c ...

  8. 赵雅智_运用Bitmap和Canvas实现图片显示,缩小,旋转,水印

    上一篇已经介绍了Android种Bitmap和Canvas的使用,以下我们来写一个详细实例 http://blog.csdn.net/zhaoyazhi2129/article/details/321 ...

  9. 赵雅智:service_startService生命周期

    案例演示 布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xm ...

随机推荐

  1. POJ 1315 Don't Get Rooked

    Don't Get Rooked Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2086   Accepted: 1325 ...

  2. POJ 2181 Jumping Cows

    Jumping Cows Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6398   Accepted: 3828 Desc ...

  3. Multiset ------ 多重集合

    Multiset的中文名是多重集合,其实就是集合的扩展版.唯一的不同是集合中一个值只能出现一次,而多重集合中一个值可以出现多次. 粗略看了看MSDN,在STL中,multiset和set的成员函数声明 ...

  4. HDU——1205吃糖果(鸽巢原理)

    吃糖果 Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submis ...

  5. BZOJ4819 [Sdoi2017]新生舞会 【01分数规划 + 费用流】

    题目 学校组织了一次新生舞会,Cathy作为经验丰富的老学姐,负责为同学们安排舞伴.有n个男生和n个女生参加舞会 买一个男生和一个女生一起跳舞,互为舞伴.Cathy收集了这些同学之间的关系,比如两个人 ...

  6. Server-Side Rendering(服务端渲染)的优点与缺点

    优点 1. SEO 客户端渲染,页面中只有初始的几个html容器,js生成内容填充到容器中,爬虫只能识别到初始的html容器,js生成的内容一般不会被识别,而服务端渲染直接给出html,爬虫可以识别到 ...

  7. 学习 WebService 第三步:一个简单的实例(RAD+WAS 8.5开发SOAP项目)

    [开发环境] Web Service 服务器端开发工具:RAD(Eclipse内核) Web Service 服务器:IBM WebSphere v8.5 REST/SOAP:SOAP(JAX-WS/ ...

  8. eclipse testng插件安装

    1.安装Testng 在Eclipse中,点击Help→Install new software→点击Add,在location中输入http://beust.com/eclipse ,选择TestN ...

  9. poj 2724 Purifying Machine

    Purifying Machine Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 5408   Accepted: 1575 ...

  10. POJ1167 The Buses

    Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 6234   Accepted: 1698 Description A man ...