1. 程式人生 > >扒美女衣服——妄撮遊戲實現原理

扒美女衣服——妄撮遊戲實現原理

you amp ava protect alt anti android 原版 color

扒美女衣服原版來自日本妄撮遊戲,如今介紹一下它的實現原理。

1、兩張美女圖片,一張穿著衣服,一張沒穿衣服。

2、採用FrameLayout將穿衣服的圖片放在上面,沒穿衣服的放在以下

3、當觸摸圖片時,將觸摸位置處的圖片設為透明。

這樣就能夠看到以下沒穿衣服的圖片,哈哈,是不是非常easy。

以下來看詳細代碼:

Layout布局兩張圖片疊加在一起

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:id="@+id/iv_after"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <ImageView
        android:id="@+id/iv_before"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</FrameLayout>
主程序代碼:

public class bayifu extends Activity {

	private ImageView iv_after;
	private ImageView iv_before;
	private Bitmap alterBitmap;
	private Canvas canvas;
	private Paint paint;
	private Bitmap after;
	private Bitmap before;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		int[] imageIds1 = new int[] { R.drawable.pre1, R.drawable.pre2,
				R.drawable.pre3, R.drawable.pre4, R.drawable.pre5,
				R.drawable.pre6, R.drawable.pre7, R.drawable.pre8,
				R.drawable.pre9, R.drawable.pre10, R.drawable.pre11,
				R.drawable.pre12, R.drawable.pre13, R.drawable.pre14,
				R.drawable.pre15, R.drawable.pre16, R.drawable.pre17,
				R.drawable.pre18, R.drawable.pre19, R.drawable.pre20,
				R.drawable.pre21 };

		int[] imageIds2 = new int[] { R.drawable.after1, R.drawable.after2,
				R.drawable.after3, R.drawable.after4, R.drawable.after5,
				R.drawable.after6, R.drawable.after7, R.drawable.after8,
				R.drawable.after9, R.drawable.after10, R.drawable.after11,
				R.drawable.after12, R.drawable.after13, R.drawable.after14,
				R.drawable.after15, R.drawable.after16, R.drawable.after17,
				R.drawable.after18, R.drawable.after19, R.drawable.after20,
				R.drawable.after21 };
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.tuoyifulayout);

		Intent ic = getIntent();
		Bundle bd = ic.getExtras();
		String is = bd.getString("num");
		int position = Integer.parseInt(is);
		BitmapFactory.Options opts = new Options();
		opts.inSampleSize = 1;

		iv_after = (ImageView) findViewById(R.id.iv_after);
		iv_before = (ImageView) findViewById(R.id.iv_before);

		after = BitmapFactory.decodeResource(getResources(),
				imageIds2[position], opts);
		before = BitmapFactory.decodeResource(getResources(),
				imageIds1[position], opts);
		// 能夠改動的空白的bitmap
		alterBitmap = Bitmap.createBitmap(before.getWidth(),
				before.getHeight(), before.getConfig());
		canvas = new Canvas(alterBitmap);
		paint = new Paint();
		paint.setStrokeCap(Cap.ROUND);
		paint.setStrokeJoin(Join.ROUND);
		paint.setStrokeWidth(5);
		paint.setColor(Color.BLACK);
		paint.setAntiAlias(true);

		canvas.drawBitmap(before, new Matrix(), paint);
		//在ImageView中設置了重疊的兩張圖片
		iv_after.setImageBitmap(after);
		iv_before.setImageBitmap(before);

		iv_before.setOnTouchListener(new OnTouchListener() {

			@Override
			public boolean onTouch(View v, MotionEvent event) {
				// TODO Auto-generated method stub

				switch (event.getAction()) {
				case MotionEvent.ACTION_DOWN:
					break;
				case MotionEvent.ACTION_MOVE:
					int newX = (int) event.getX();
					int newY = (int) event.getY();
					//將觸摸區域。圖片的像素設為透明
					for (int i = -10; i < 10; i++) {
						for (int j = -10; j < 10; j++) {
							if (i + newX >= 0 && j + newY >= 0
									&& i + newX <= before.getWidth()
									&& j + newY <= before.getHeight())
								alterBitmap.setPixel(i + newX, j + newY,
										Color.TRANSPARENT);
						}
					}
					iv_before.setImageBitmap(alterBitmap);
					break;
				}
				return true;
			}
		});
	}

}

3、效果圖

技術分享技術分享

扒美女衣服——妄撮遊戲實現原理