实现思路

说说实现的大概思路,首先要有两副图片。这两幅图片的区别就在于一副有穿衣服,另外一副没有穿衣服,其他的细节都要一模一样。这对于懂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"><ImageViewandroid:src="@drawable/after1"android:layout_width="wrap_content"android:layout_height="wrap_content" /><ImageViewandroid:id="@+id/iv2android: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() {@Overridepublic 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() {@Overridepublic 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下载

Android:简单实现美女扒衣服小游戏相关推荐

  1. 【180928】美女贪吃蛇小游戏源码

    本源码是一个简单的c#版美女贪吃蛇小游戏源码,基于winform技术制作.控制方向键即可.右侧有记分板,每走一步都记加分.贪吃蛇身体掠过的地方就会显示背景图片,身体越长,显示的越多,玩家可以将图片换成 ...

  2. 用Unity3D实现简单的井字棋小游戏

    用Unity3D实现简单的井字棋小游戏 项目地址 井字棋小游戏 完成效果图 实现思路 首先定义游戏的数据部分: /* 井字棋中每一个棋格中的逻辑控制常量,代表这个棋格的状态 */ private co ...

  3. 使用UE4制作简单的局域网对战小游戏

    原帖地址:https://arcecho.github.io/2017/04/28/使用UE4制作简单的局域网对战小游戏/ 大多数文章都是只讲到大致的UE4网络的概念,并未涉及实际使用.事实上在使用的 ...

  4. C语言简单的键盘玩扫雷小游戏(完结)

    1:这次我们会将前面的代码进行整合,和整理,最终使我们的程序可以有效的运行起来. [1]初始化函数. void GameInit() {     //随机数种子     srand((unsigned ...

  5. python人狗大战游戏_day22 01 初识面向对象----简单的人狗大战小游戏

    day22 01 初识面向对象----简单的人狗大战小游戏 假设有一个简单的小游戏:人狗大战   怎样用代码去实现呢? 首先得有任何狗这两个角色,并且每个角色都有他们自己的一些属性,比如任务名字nam ...

  6. 一个简单的五子连珠小游戏

    一个简单的五子连珠小游戏 程序目的:设计一个五子连珠小游戏 1,棋盘大小是9X9 2,初始状态棋盘上随机分布着7个不同色的棋子. 3,当同色的棋子有5颗连在一起排成横向.纵向或者斜向时,游戏者可以得1 ...

  7. Android 300行代码实现经典小游戏贪吃蛇

    前言 贪吃蛇算是一个非常经典的小游戏了,本人00后,初次游玩是在小时候用诺基亚手机进行游玩的.这次算是复刻一下经典hhh,贪吃蛇算是一个制作起来非常简单的小游戏,本文使用Kotlin语言进行开发,用J ...

  8. 利用python做一个小游戏_如何使用python做一个简单的猜数字的小游戏

    1 首先小编先打开IDLE,如下图: 2 然后这里点击菜单栏的'File',然后点击菜单"New File",如下图: 3 然后我们就在idle中新建了一个python文件,如下图 ...

  9. html5合影拍照小游戏,html5实现简单别踩白块小游戏

    属于简化版别踩白块,代码相对较为简单易学,主要涉及通过 javascript 操作元素节点的增删以及属性节点(class)的操作. HTML/CSSJavaScript元素节点增删属性节点操作 在开始 ...

最新文章

  1. 海思3536:PC客户端编译过程报错及解决方法
  2. enum java 原理_Java 枚举实现原理
  3. TensorFlow、PyTorch之后,“国产”AI框架还有没有机会?
  4. python编程书籍1020python编程书籍_从零单排之玩转Python安全编程(II)
  5. matlab读取suffer,MATLAB调用surfer时出错
  6. HttpResponse对象
  7. 简历python技能怎么写_简历怎么写?列出这10项重要的工作技能
  8. Ubuntu14.04如何启用界面root账户登录
  9. 【GDB调试学习笔记】Makefile多级目录生成可执行文件
  10. c语言第三章知识点讲解,C语言考试最新知识点总结讲解.doc
  11. 面试官:如何进行 JVM 调优(附真实案例)
  12. 备考OCJP认证知识点总结(四)
  13. IE兼容/IE5兼容踩过的坑
  14. Cesium.js解析第一篇 Cartesian3
  15. iconfont字体图标以及css字体图标在线制作和使用(推荐)
  16. 3D目标检测-BEVFormer、BEVDepth
  17. 颠覆你想象的企业报表软件——思迈特软件Smartbi
  18. 碎碎念No.01 你是个自信的人嘛
  19. 数据结构-顺序表的顺序存储
  20. 暗组工具箱 荐!!!

热门文章

  1. windows C 盘扩容
  2. CAN总线基础知识(一)
  3. 【Python常微分方程】
  4. 2022危险化学品经营单位安全管理人员考试试题及答案
  5. DAZ3D导入模型设置材质
  6. show full processlist,MySQL 优化第7天学习
  7. 消息称,用户已收到华为 HarmonyOS 2.0 开发者公测版推送
  8. 高度优先左高树(HBLT) - C语言
  9. echarts地图/中国
  10. Redis性能测试工具benchmark简介