今天我们学习撕衣服。我先说一下撕衣服的原理: 撕衣服有2张图片,一张是美女穿外衣的图片,一张是美女穿内衣的图片。当我们手指滑动后,然后将美女穿外衣衣服的图片设置为透明色,这样下面的图片就显示出来了。
直接上代码:
public class MainActivity extends Activity {
private Bitmap bmpCopy;
private Paint paint;
private Canvas canvas;
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//1: 因为我修改外衣的图片,所以要给外衣设置副本
Bitmap bmpSrc = BitmapFactory.decodeResource(getResources(), R.drawable.awaiyi);
bmpCopy = Bitmap.createBitmap(bmpSrc.getWidth(), bmpSrc.getHeight(), bmpSrc.getConfig());
paint = new Paint();
canvas = new Canvas(bmpCopy);
canvas.drawBitmap(bmpSrc, new Matrix(), paint);
imageView = (ImageView) findViewById(R.id.lv2);
imageView.setImageBitmap(bmpCopy);
//2:监听触摸事件
imageView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
//我们只关心滑动事件
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
//手指滑动的轨迹设置为透明色
int x = (int) event.getX();
int y = (int) event.getY();
cleanImage(x, y);
break;
default:
break;
}
return true;
}
});
}
//因为每次只设置1个像素,这样很慢
public void cleanImage(int x, int y)
{
for(int i = -10; i < 10; i++)
{
for(int j = -10; j < 10; j++)
{
//绘制以x,y为圆心半径为10的圆
if(Math.sqrt(i*i + j*j) <= 10)
{
//判断手指是否越界, 如果越界不处理
if(x+i < bmpCopy.getWidth() && y+j < bmpCopy.getHeight() && x+i >=0 && y+j >=0)
{
//设置透明色
bmpCopy.setPixel(x+i, y+j, Color.TRANSPARENT);
//设置图像
imageView.setImageBitmap(bmpCopy);
}
}
}
}
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/longwang155069/article/details/47157555