Bitmap操作图片之刮刮奖
2019-05-15 本文已影响0人
MengkZhang
刮刮奖又名撕开她的外衣小游戏,哈哈哈哈
原理:
创建一个原图的副本来操作图片(详解见上一篇博客创建一个原图的副本来操作图片
在ImageView的onTouch触摸事件中,记录手指滑动的开始坐标和结束坐标,在结束坐标处让Bitmap的副本变得透明,露出原图的Bitmap而已;并改变开始坐标和结束坐标
示例代码:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//用来显示 操作后的图片
final ImageView iv = (ImageView) findViewById(R.id.iv);
//[1]获取要操作图片 原图
Bitmap srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pre19);
//[2]创建一个副本 相当于有一个和原图大小的白纸
final Bitmap alterBitmap = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), srcBitmap.getConfig());
//创建画笔
Paint paint = new Paint();
//创建画布 把白纸铺到画布上
Canvas canvas = new Canvas(alterBitmap);
//开始作画
canvas.drawBitmap(srcBitmap, new Matrix(), paint);
iv.setImageBitmap(alterBitmap);
//[3]给vi设置一个触摸事件
iv.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
//[4]具体判断一下触摸事件
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE://移动事件
for (int i = -7; i < 7; i++) { //增加X轴坐标
for (int j = -7; j < 7; j++) {
//增加Y轴坐标
//为了良好的用户体验 撕一个圆
if (Math.sqrt(i*i+j*j)<7) {
try {
alterBitmap.setPixel((int)event.getX()+i, (int)event.getY()+j, Color.TRANSPARENT);
} catch (Exception e) {
}
}
}
}
//更新一下iv
iv.setImageBitmap(alterBitmap);
break;
}
return true;
}
});
}
}
程序运行结果: