文档章节

android开发笔记之多媒体—撕衣服(开心一下)

Mr_Nice
 Mr_Nice
发布于 2016/05/22 19:59
字数 432
阅读 4
收藏 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>

© 著作权归作者所有

共有 人打赏支持
Mr_Nice
粉丝 0
博文 47
码字总数 39947
作品 0
广州
私信 提问
Android项目刮刮奖详解扩展篇——开源刮刮奖View的制作

Android项目刮刮奖详解(四) 前言 我们已经成功实现了刮刮奖的功能了,本期是扩展篇,我们把这个View直接定义成开源控件,发布到JitPack上,以后有需要也可以直接使用,关于自定义控件的知识...

Stars-one
2018/08/22
0
0
从简易计算器学习Android开发

版权声明:有问题请联系邮箱 gsjujj@163.com https://blog.csdn.net/qq38066103/article/details/84641332 初学Android移动开发,先从一个简单的项目开始——简易计算器。 前言: 如果你在A...

我好菜哦
2018/11/30
0
0
android自学笔记《四》——应用程序结构分析

昨天在帖子里看到的一个分析方法,很简单,给大家分享下! 呵呵,由于我也是刚开始学习Android,还没有学到下面这些知识,这里就直接截图了。 看完他这个分析之后,我对Android程序有了一个简...

郭子
2012/02/03
0
1
Android 第一课——Android架构

声明:本文是学习Android时从《Android 4编程入门经典》摘抄!仅仅是作为复习时查看的笔记! 1 Android是一个linux系统 Android 是一个基于 Linux 的开源的手机操作系统。它可以供任何打算使...

learn_more
2014/12/28
0
0
微软与 74 家 Android 手机制造商达成预装协议

据国外科技媒体AndroidHeadlines报道,在2015年春季的时候,与微软有合作的安卓手机制造商就已经达到了31家之多,他们在各自的出厂的手机上都预装了微软开发出来的应用。而到了2016年之后,这...

oschina
2016/02/13
5.3K
17

没有更多内容

加载失败,请刷新页面

加载更多

深入理解JVM—JVM内存模型

深入理解JVM—JVM内存模型 我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存...

onedotdot
33分钟前
1
0
MVC、MVCS、MVVM、MVP、VIPER等这么多架构模式哪一个好呢?

在项目开启阶段,其中一个很重要的环节就是选架构。 那么面对目前已知的这么多架构模式我们该怎么选择呢?这确实是个很让人头疼的问题! 下面我就在这里梳理一下目前常见的一些架构模式。 先...

Java干货分享
今天
4
0
简单模仿配置文件的反射机制

//Student类 public class Student { public void love() { System.out.println("python"); } } //Tesy类 public class Tesy { public static void main(String[] args) throws Exceptio......

南桥北木
今天
2
0
你真的需要了解一下CSS变量 var()的用法

当Web项目变得越来越大时,他的CSS会变得像天文数字那么大而且还变得混乱。为了帮助我们解决这个问题,新的CSS变量很快就会出现在主流浏览器中,它让开发人员能够重用并轻松编辑重复出现的C...

前端小攻略
今天
1
0
嵌入式应用选择合适的微控制器

为嵌入式应用选择微控制器有几个原因,即低成本,高集成度,增加可靠性,节省空间等。 准备所需硬件接口列表使用微控制器的基本硬件框图,准备一份微控制器需要支持的所有外设接口的列表。微...

linux-tao
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部