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

现在很多 Android 市场中都能找到关于美女的应用,比如 撕开美女衣服、吹裙子等。

这些应用的下载量挺大的,作为 Android 的开发人员或者一名技术人员我们不能只局限在欣赏应用的层面,很多时候需要我们去揭开神秘背后的真相,下面我们来看一下如何来开发这样一个类似的撕开美女衣服的应用。

先来看一下效果:

其实这个应用的原理很简单,有两张图片,布局如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
	<ImageView 
	    android:id="@+id/back_img"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    android:layout_gravity="center"
	    android:src="@drawable/back"/>
	<ImageView 
	    android:id="@+id/up_img"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    android:layout_gravity="center"
	    android:src="@drawable/up"/>
</FrameLayout>

上面一张图片是穿着衣服的图片,下面一张图片是撕开衣服的图片。

在 Activity 中我们先创建一个可以编辑的 Bitmap 图片对象,然后对该图片中像素点的颜色(透明度)进行改变就实现我们所要的效果了。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package com.example.sikaimeinvyifu;
 
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapFactory.Options;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
 
public class MainActivity extends Activity {
	private ImageView backImg;
	private ImageView upImg;
	private Bitmap alterBitmap;
	private Canvas canvas;
	private Paint paint;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		//改变图片大小
		BitmapFactory.Options opts = new Options();
		opts.inSampleSize = 1;
		
		backImg = (ImageView) findViewById(R.id.back_img);
		upImg = (ImageView) findViewById(R.id.up_img);
		//只读的图片
		Bitmap back = BitmapFactory.decodeResource(getResources(), R.drawable.back, opts);
		Bitmap up = BitmapFactory.decodeResource(getResources(), R.drawable.up, opts);
		//可以修改的空白的Bitmap
		alterBitmap = Bitmap.createBitmap(up.getWidth(), up.getHeight(), up.getConfig());
		
		//将alterBitmap作为画布,然后将Bitmap up画到画布上。
		canvas = new Canvas(alterBitmap); 
		paint = new Paint();
		paint.setStrokeWidth(5);
		paint.setColor(Color.BLACK);
		canvas.drawBitmap(up, new Matrix(), paint);
		
		
		backImg.setImageBitmap(back);
		upImg.setImageBitmap(alterBitmap);
		
		upImg.setOnTouchListener(new 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();
					System.out.println(x);
					System.out.println(y);
					for(int i=-5; i<5; i++){
						for(int j=-5; j<5; j++){
							//更改画布上该像素点的颜色
							alterBitmap.setPixel(i + x, j + y, Color.TRANSPARENT);
						}
					}
					//重新绘制到ImageView上面
					upImg.setImageBitmap(alterBitmap);
					break;
 
				default:
					break;
				}
				return true;
			}
		});
	}
}