实现效果

主要代码

<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

最新文章

  1. C#读取文件为byte[]
  2. Scalaz(23)- 泛函数据结构: Zipper-游标定位
  3. Python实现nb(朴素贝叶斯)
  4. 7款个性化jQuery/HTML5地图插件
  5. count()与sum()
  6. windows7实用快捷键 分类: windows常用小技巧 2014-04-18 14:34 169人阅读 评论(0) 收藏
  7. hdu4336压缩率大方的状态DP
  8. jQuery获取checkbox选中项等操作及注意事项
  9. leetcode — scramble-string
  10. day03 文件操作
  11. 一、kubeadm安装
  12. 【题解】Hanoi
  13. XenServer中虚拟机和快照导出与导入
  14. Spring AMQP 源码分析 05 - 异常处理
  15. SpringBoot相知
  16. 第一个python教程(1)
  17. Java多线程小例子(三个窗口卖火车票)
  18. 可变大小、颜色边框、样式的UISwitch
  19. Sass 基础(一)
  20. 最大子序列和——HDU-1003 Max Sum

热门文章

  1. 九度oj 题目1171:C翻转
  2. Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)
  3. HDU——2054A==B?
  4. HDU 5402 : Travelling Salesman Problem
  5. Visual Code 自定义插件安装位置
  6. APUE 学习笔记(七) 信号
  7. ajax 将整个表单提交到后台处理
  8. AC日记——2条不相交的路径 51nod 1076
  9. cin和scanf的速度差别
  10. 51Nod 1239 欧拉函数前n项和 杜教筛