文档章节

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

Mr_Nice
 Mr_Nice
发布于 2016/05/22 19:59
字数 432
阅读 3
收藏 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自学笔记《四》——应用程序结构分析

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

郭子
2012/02/03
0
1
Android项目刮刮奖详解扩展篇——开源刮刮奖View的制作

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

Stars-one
08/22
0
0
Android 第一课——Android架构

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

learn_more
2014/12/28
0
0
Cocos2dx游戏开发系列笔记1:一个崭新的开始,cocos2dx2.2+ndkr9+Cygwin

Android开发者做cocos2dx最大的绊脚石,不是c++,而是环境的搭建... 骨头也是费了半天劲才终于在真机上看到了那个类似猕猴桃的头,这里简单记录一下。 环境:(算比较新了2013.11.17) coco...

懒骨头
2013/12/09
0
0
Cocos2dx游戏开发系列笔记9:android手机上运行《战神传说》,并解决横竖屏即分辨率自适应

上节说到cygwin下成功编译出so文件,下面我们要把游戏运行在android上。 开始干活! 其实步骤可以参考 Cocos2dx游戏开发系列笔记6:怎样让《萝莉快跑》的例子运行在vs和手机上 1 用eclipse打...

懒骨头
2013/12/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

VSCode 搭建Vue开发环境之Vue CLI

一、简介说明 1.关于VS Code开发工具,安装和配置,更多可以参考以前文章 2.关于Vue.js,Vue是一个优秀的渐进式前端框架,不仅易于上手,还便于与第三方库或既有项目整合。 3.关于Vue是使用方...

tianma3798
24分钟前
2
0
MySQL 相关博客整理

1. 《深入理解 MySQL 底层实现》 简评:文章从硬盘底层存储原理讲解到MySQL存储原理,其中涉及InnoDB 和 Myisam 中 B+Tree 的应用,以及常见数据库优化思路,算是一片很不错的讲解MySQL原理的...

科陆李明
34分钟前
2
0
pada rabbitmq server mangage

查看配置文件 ubuntu@node4:/etc/rabbitmq$ lltotal 28drwxr-xr-x 2 rabbitmq rabbitmq 4096 Jun 6 13:52 ./drwxr-xr-x 104 root root 12288 Sep 26 11:39 ../-rw-r--r-- ......

qwfys
42分钟前
0
0
SpringBoot进阶

慕课网链接 表单数据的验证 在pojo类属性的上面添加注解 @Entitypublic class Girl { @Id @GeneratedValue private Integer id; @NotBlank(message = "这个字段...

踏破铁鞋无觅处
49分钟前
1
0
【SylixOS】QT-QWS流程介绍

QWS简介 QWS(QT Windows System)是QT自行开发的窗口系统,体系结构类似X Windows的C/S结构。QWS Server在物理设备上显示,QWS Client实现界面,两者通过socket进行彼此的通讯。在很多嵌入式系...

suokin
49分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部