Android:简单实现美女扒衣服小游戏

原创 2015年11月20日 21:59:56

实现思路

说说实现的大概思路,首先要有两副图片。这两幅图片的区别就在于一副有穿衣服,另外一副没有穿衣服,其他的细节都要一模一样。这对于懂ps的童鞋就好办啦自己动手制作就好了。但是本文为了照顾不懂ps的童鞋,提供两幅图片供大家使用~~图中美女不美各位不要吐槽哈~。

A图:没穿衣服(after1)

B图:有衣服的(pre1)

首先一开始是把A图放在屏幕上,然后再把B图覆盖在A图上。那样用户一开始看到的是B图。我们通过,监听手指移动到哪些坐标上,就设置这些坐标的颜色为透明色。那么用户看到的就是A图,也就达到了扒衣服的效果。


大概思路简单叙述完了,那么接下来看看详细代码:


具体实现

首先在xml布局文件写上两个ImageView


<?xml version="1.0" encoding="utf-8"?>
<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=".MainActivity">

    <ImageView
        android:src="@drawable/after1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <ImageView
        android:id="@+id/iv2
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</RelativeLayout>
由于我们只需操作B图的像素点的颜色是否透明,所以只给第二个ImageView 定义id,第一个ImageView则不定义id

然后我们看java代码:
首先获取B图的bitmap对象:
       bitmap= BitmapFactory.decodeResource(getResources(), R.drawable.pre1);

在对B图进行处理之前我们先得出B图的副本copyBitmap:
1.创建空白bitmap
copyBitmap=Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig());
2.实例化Canvas对象,并把copyBitmap传进去
   Canvas canvas=new Canvas(copyBitmap);
3.new一支画笔出来,并设置默认颜色:
        Paint paint=new Paint();
        paint.setColor(Color.BLACK);

4.最后照着B图“画”出来
 canvas.drawBitmap(bitmap, new Matrix(), paint);
就这样copyBitmap就与B图的实例bitmap一模一样了,也就是说已经创建出B图的的副本啦。

最后把copyBitmap显示在表层的ImageView(也就是布局文件中的第二个ImageView)上
 iv2.setImageBitmap(bitmap);

现在运行会看到是这个样子的:




显示图片的步骤就是以上四步,那么接下来我们来实现监听用户手指滑动,并在所滑过的坐标设置为透明。

        iv2.setOnTouchListener(new View.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();
                                    copyBitmap.setPixel(x, y , Color.TRANSPARENT);
                        iv2.setImageBitmap(copyBitmap);
                        Log.i("test", x + "," + y);
                        break;
                }

                return true;
            }
        });

copyBitmap.setPixel(x, y , Color.TRANSPARENT);代码就是将坐标为想x,y的像素点设置为透明色,而event.getX()与event.getY()则是分别获取用户触摸控件上的x坐标和y坐标。请注意这里笔者说的是控件上的坐标,并不是屏幕上的坐标。关于屏幕坐标与控件坐标的区别可以看以下博文
http://blog.sina.com.cn/s/blog_4b93170a0102ds4d.html


写到这里,可以运行一下,可以发现是可以“扒掉衣服”但是未免扒得也太慢了吧。为了满足饥渴的大家,为了能够扒衣服扒得快一点可以加上几句代码,变成这样:

 case MotionEvent.ACTION_MOVE:
                        int x = (int) event.getX();
                        int y = (int) event.getY();
                        for (int i = -18; i < 20; i++) {
                            for (int j = -18; j < 20; j++) {
                                try {
                                    copyBitmap.setPixel(x + i, y + j, Color.TRANSPARENT);
                                } catch (Exception e) {
                                    // TODO: handle exception
                                }
                            }
                        }


                        iv2.setImageBitmap(copyBitmap);
                        Log.i("test", x + "," + y);
                        break;


聪明的读者一定可以发现,这几句代码的作用就是把目标像素点的周围的像素点也变成透明色,来达到我们手指的作用范围。

写到这里可以发现扒衣服的速度明显快很多。
恩~只有扒衣服未免单一了一点,我们还可以在扒衣服的过程中加点声音。
我们可以在手指滑动之后抬起的时候播放我们预先准备的声音,在手指触摸到屏幕的时候停止播放。

        iv2.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_UP:

                            mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.higirl);


                        mediaPlayer.start();;
                        break;
                    case MotionEvent.ACTION_MOVE:
                        int x = (int) event.getX();
                        int y = (int) event.getY();
                        for (int i = -18; i < 20; i++) {
                            for (int j = -18; j < 20; j++) {
                                try {
                                    copyBitmap.setPixel(x + i, y + j, Color.TRANSPARENT);
                                } catch (Exception e) {
                                    // TODO: handle exception
                                }
                            }
                        }


                        iv2.setImageBitmap(copyBitmap);
                        Log.i("test", x + "," + y);
                        break;
                    case MotionEvent.ACTION_DOWN:
                        if(mediaPlayer!=null){
                            mediaPlayer.stop();

                            mediaPlayer.release();
                        }

                        break;

                }

                return true;
            }

声音文件笔者放到res\raw里面了。
在这里再运行一次:




最后要用到的图片和声音文件都在demo里面,有兴趣的可以下载一下。


DEMO下载





















版权声明:本文为博主原创文章,未经博主允许不得转载。

撕美女衣服应用的原理及做法

现在教大家做一款在市场上非常火的的应用,撕美女衣服。其实原理很简单: 1.准备两张一样的图片,一张是穿有衣服的,另一张是没有穿衣服的。 2.通过FrameLayout进行布局,穿衣服的放上面,没穿衣服...
  • loongggdroid
  • loongggdroid
  • 2014年01月21日 12:32
  • 7906

Android 仿美女撕衣服效果

因为我写demo的时候不是用一整屏幕来放置当前图片View的,且资源图也不小,所以用到了bitmap缩放 代码注释比较详尽,直接上了 package com.stone.guaguaka.view...
  • jjwwmlp456
  • jjwwmlp456
  • 2016年01月28日 15:17
  • 1420

Android应用《撕开美女衣服》的实现过程及源代码

现在很多Android市场中都能找到关于美女的应用,比如 撕开美女衣服、吹裙子等。 这些应用的下载量挺大的,作为Android的开发人员或者一名技术人员我们不能只局限在欣赏应用的层面,很多时候需要我们...
  • lxq_xsyu
  • lxq_xsyu
  • 2013年12月20日 13:20
  • 6020

Android 撕开美女衣服解析

一、原理: 现在教大家做一款在市场上非常火的的应用,撕美女衣服。其实原理很简单: 1.准备两张一样的图片,一张是穿有衣服的,另一张是没有穿衣服的。 2.通过FrameLayout进行布局,穿衣服...
  • lovoo
  • lovoo
  • 2016年05月15日 23:05
  • 332

Android 实战美女拼图游戏 你能坚持到第几关

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40595385,本文出自:【张鸿洋的博客】1、概述继2048之后,今天给大家带来一...
  • lmj623565791
  • lmj623565791
  • 2014年11月03日 09:37
  • 25662

Android美女拼图游戏

概述 游戏下载试玩 Github 喜欢的同学可以 Star 一下,非常感谢 个人博客 我的博客 把图片切分很多份,点击交换拼成一张完整的;这样关卡也很容易设计, 3*3 ; 4*4 ; 5*5 ; 6...
  • qq_26891045
  • qq_26891045
  • 2016年09月12日 21:13
  • 817

Android小游戏应用---撕破美女衣服游戏

ImageView after; ImageView before; @Override protected void onCreate(Bundle savedInstanceState) {...
  • andywuchuanlong
  • andywuchuanlong
  • 2014年05月17日 16:58
  • 1443

扒美女衣服——妄撮游戏实现原理

扒美女衣服原版来自日本妄撮游戏,现在介绍一下它的实现原理。 1、两张美女图片,一张穿着衣服,一张没穿衣服。 2、采用FrameLayout将穿衣服的图片放在上面,没穿衣服的放在下面 3、当触摸图片时,...
  • axiaoquan
  • axiaoquan
  • 2014年05月15日 16:05
  • 866

一个简单JS小游戏

这是一个简单的利用JS制作的卡片类游戏, 卡片游戏 创建一个卡片 B I N G O ...
  • qq_15857627
  • qq_15857627
  • 2017年02月19日 14:10
  • 452

撕开美女的衣服

public class MainActivity extends Activity { private ImageView iv_back; private ImageView iv_up; ...
  • oyty892968
  • oyty892968
  • 2013年09月07日 16:45
  • 556
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android:简单实现美女扒衣服小游戏
举报原因:
原因补充:

(最多只允许输入30个字)