android开发笔记之多媒体—撕衣服(开心一下)
博客专区 > Mr_Nice 的博客 > 博客详情
android开发笔记之多媒体—撕衣服(开心一下)
Mr_Nice 发表于2年前
android开发笔记之多媒体—撕衣服(开心一下)
  • 发表于 2年前
  • 阅读 2
  • 收藏 0
  • 点赞 2
  • 评论 0

效果图:

这里写图片描述

看到是不是很激动呢,在这里讲一下原理,其实很简单,就是两张图片叠在一下,当鼠标触摸的时候改变上面那张图片的透明度就可以了。

核心代码:

public class MainActivity extends Activity {

    private ImageView iv;
    private Bitmap baseBitmap,copyBitmap;
    private Canvas canvas;  //画布
    private Paint paint;    //画笔
    private Matrix matrix;  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        iv = (ImageView) findViewById(R.id.iv);
        //拿到上面那找图
        baseBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pre);
        //拿到一张和上面那张图一样大小的纸
        copyBitmap = Bitmap.createBitmap(baseBitmap.getWidth(), baseBitmap.getHeight(), baseBitmap.getConfig());
        //把画纸固定在画布上
        canvas = new  Canvas(copyBitmap);
        //拿到一只画笔
        paint = new Paint();
        //添加处理了规则
        matrix = new Matrix();
        //照着上面那张图画(画一次就好)
        canvas.drawBitmap(baseBitmap, matrix, paint);

        //在imageView所在区域被触摸时回调
        iv.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                //按下(1次)
                case MotionEvent.ACTION_DOWN:
                    break;
                //移动 (0-N次)
                case MotionEvent.ACTION_MOVE:
                    //getX和getY得到的坐标是以控件左上角为原点
                    int moveX = (int)event.getX();
                    int moveY = (int)event.getY();
                    //getRawX和getRawY得到的坐标是以屏幕左上角为原点
// event.getRawX();
// event.getRawY();
                    try {
                        //针对单个像素点去说的(每次触摸改变透明度的像素点太少,扩大范围)
                        for (int i = -20; i < 21; i++) {
                            for (int j = 0; j < 21; j++) {
                                //使其像素变成透明
                                copyBitmap.setPixel(moveX+i, moveY+j, Color.TRANSPARENT);
                            }
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    //显示到ImageView组件上
                    iv.setImageBitmap(copyBitmap);
                    break;
                //抬起 (1次)
                case MotionEvent.ACTION_UP:
                    break;
                default:
                    break;
                }
                //方法被消费了
                return true;
            }
        });
    }
}

布局文件:

<RelativeLayout 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" tools:context="com.briup.siyifu.MainActivity" >

    <ImageView  android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/after" android:layout_centerInParent="true"/>

    <ImageView  android:id="@+id/iv" android:layout_centerInParent="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/pre" />

</RelativeLayout>
共有 人打赏支持
粉丝 0
博文 47
码字总数 39947
×
Mr_Nice
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: