`
helloandroid
  • 浏览: 276191 次
  • 性别: Icon_minigender_1
  • 来自: 成都
博客专栏
107f8db3-b009-3b79-938a-dafddb49ea79
Android腾讯微博客户...
浏览量:95836
社区版块
存档分类
最新评论

android小应用帮美女更衣系列二(附源码)

阅读更多
点击ImageSwitcher显示的图片即可切换到为美女换衣全屏界面,手指在界面上滑动,滑动处的衣服就被褪掉了,很黄很暴力,大家要hold住呀!!
其实啊这个实现就是两张图片,一张底图,一张上面的图,上面的图都被抹掉了,下面的图就出来了,主要是PorterDuff和PorterDuffXfermode的利用,APIDEMO里面也有相关的介绍。好,贴出主要代码:

package com.picture;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;

public class RemoveClothActivity extends Activity {

	private int SCREEN_W;

	private int SCREEN_H;

	private int imagePosition;
	
	private MediaPlayer mp3Player;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置全屏
		Intent intent = getIntent();
		imagePosition = intent.getIntExtra("imagePosition", 0);
		initMP3Player();
		setContentView(new MyView(this));
	}
	
	private void initMP3Player(){
		mp3Player = MediaPlayer.create(RemoveClothActivity.this, R.raw.higirl);
		mp3Player.setLooping(false);
	}
	
	private void playMusic(){
		mp3Player.start();
	}

	class MyView extends View {
		private Bitmap mBitmap;
		private Canvas mCanvas;
		private Paint mPaint;
		private Path mPath;
		private float mX, mY;
		private static final float TOUCH_TOLERANCE = 4;
		
		public MyView(Context context) {
			super(context);
			setFocusable(true);
			setScreenWH();
			setBackGround();

			// 1.if icon1 is a image,you can open MENU_ITEM_COMMENT bellow
			// Bitmap bm = createBitmapFromSRC();
			// if you want to set icon1 image's alpha,you can open
			// MENU_ITEM_COMMENT bellow
			// bm = setBitmapAlpha(bm, 100);
			// if you want to scale icon1 image,you can open MENU_ITEM_COMMENT
			// bellow
			// bm = scaleBitmapFillScreen(bm);

			// 2.if icon1 is color
			// Bitmap bm = createBitmapFromARGB(0x8800ff00, SCREEN_W, SCREEN_H);
			int drawableId = 0;
			try {
				drawableId = R.drawable.class.getDeclaredField(
						"pre" + imagePosition).getInt(this);
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (SecurityException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			} catch (NoSuchFieldException e) {
				e.printStackTrace();
			}
			Bitmap bm = scaleBitmapFillScreen(BitmapFactory.decodeResource(getResources(), drawableId));
			seticon1Bitmap(bm);

		}

		private void setScreenWH() {
			// get screen info
			DisplayMetrics dm = new DisplayMetrics();
			dm = this.getResources().getDisplayMetrics();
			// get screen width
			int screenWidth = dm.widthPixels;
			// get screen height
			int screenHeight = dm.heightPixels;

			SCREEN_W = screenWidth;
			SCREEN_H = screenHeight;
		}

		private Bitmap createBitmapFromSRC() {
			return BitmapFactory.decodeResource(getResources(),
					R.drawable.icon1);
		}

		/**
		 * 
		 * @param colorARGB
		 *            should like 0x8800ff00
		 * @param width
		 * @param height
		 * @return
		 */
		private Bitmap createBitmapFromARGB(int colorARGB, int width, int height) {
			int[] argb = new int[width * height];

			for (int i = 0; i < argb.length; i++) {

				argb[i] = colorARGB;

			}
			return Bitmap.createBitmap(argb, width, height, Config.ARGB_8888);
		}

		/**
		 * 
		 * @param bm
		 * @param alpha
		 *            ,and alpha should be like ox00000000-oxff000000
		 * @note set bitmap's alpha
		 * @return
		 */
		/*
		 * private Bitmap setBitmapAlpha(Bitmap bm, int alpha) { int[] argb =
		 * new int[bm.getWidth() * bm.getHeight()]; bm.getPixels(argb, 0,
		 * bm.getWidth(), 0, 0, bm.getWidth(), bm .getHeight());
		 * 
		 * 
		 * for (int i = 0; i < argb.length; i++) {
		 * 
		 * argb[i] = ((alpha) | (argb[i] & 0x00FFFFFF)); } return
		 * Bitmap.createBitmap(argb, bm.getWidth(), bm.getHeight(),
		 * Config.ARGB_8888); }
		 */

		/**
		 * 
		 * @param bm
		 * @param alpha
		 *            ,alpha should be between 0 and 255
		 * @note set bitmap's alpha
		 * @return
		 */
		private Bitmap setBitmapAlpha(Bitmap bm, int alpha) {
			int[] argb = new int[bm.getWidth() * bm.getHeight()];
			bm.getPixels(argb, 0, bm.getWidth(), 0, 0, bm.getWidth(),
					bm.getHeight());

			for (int i = 0; i < argb.length; i++) {

				argb[i] = ((alpha << 24) | (argb[i] & 0x00FFFFFF));
			}
			return Bitmap.createBitmap(argb, bm.getWidth(), bm.getHeight(),
					Config.ARGB_8888);
		}

		/**
		 * 
		 * @param bm
		 * @note if bitmap is smaller than screen, you can scale it fill the
		 *       screen.
		 * @return
		 */
		private Bitmap scaleBitmapFillScreen(Bitmap bm) {
			return Bitmap.createScaledBitmap(bm, SCREEN_W, SCREEN_H, true);
		}

		private void setBackGround(){
			int drawableId = 0;
			try {
				drawableId = R.drawable.class.getDeclaredField(
						"after" + imagePosition).getInt(this);
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (SecurityException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			} catch (NoSuchFieldException e) {
				e.printStackTrace();
			}
			setBackgroundResource(drawableId);
		}

		/**
		 * 
		 * @param bm
		 * @note set icon1 bitmap , which overlay on background.
		 */
		private void seticon1Bitmap(Bitmap bm) {
			// setting paint
			mPaint = new Paint();
			mPaint.setAlpha(0);
			mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
			mPaint.setAntiAlias(true);

			mPaint.setDither(true);
			mPaint.setStyle(Paint.Style.STROKE);
			mPaint.setStrokeJoin(Paint.Join.ROUND);
			mPaint.setStrokeCap(Paint.Cap.ROUND);
			mPaint.setStrokeWidth(20);

			// set path
			mPath = new Path();
			;

			// converting bitmap into mutable bitmap
			mBitmap = Bitmap.createBitmap(SCREEN_W, SCREEN_H, Config.ARGB_8888);
			mCanvas = new Canvas();
			mCanvas.setBitmap(mBitmap);
			// drawXY will result on that Bitmap
			// be sure parameter is bm, not mBitmap
			mCanvas.drawBitmap(bm, 0, 0, null);
		}

		@Override
		protected void onDraw(Canvas canvas) {
			canvas.drawBitmap(mBitmap, 0, 0, null);
			mCanvas.drawPath(mPath, mPaint);
			super.onDraw(canvas);
		}

		private void touch_start(float x, float y) {
			mPath.reset();
			mPath.moveTo(x, y);
			mX = x;
			mY = y;
		}

		private void touch_move(float x, float y) {
			float dx = Math.abs(x - mX);
			float dy = Math.abs(y - mY);
			if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
				mPath.quadTo(mX, mY, (x + mX) / 2, (y + mY) / 2);
				mX = x;
				mY = y;
			}
		}

		private void touch_up() {
			mPath.lineTo(mX, mY);
			// commit the path to our offscreen
			mCanvas.drawPath(mPath, mPaint);
			// kill this so we don't double draw
			mPath.reset();
		}

		@Override
		public boolean onTouchEvent(MotionEvent event) {
			float x = event.getX();
			float y = event.getY();

			switch (event.getAction()) {
			case MotionEvent.ACTION_DOWN:
				touch_start(x, y);
				invalidate();
				break;
			case MotionEvent.ACTION_MOVE:
				touch_move(x, y);
				invalidate();
				break;
			case MotionEvent.ACTION_UP:
				touch_up();
				invalidate();
				playMusic();
				break;
			}
			return true;
		}
	}
}

  • 大小: 378.6 KB
  • 大小: 413.2 KB
  • 大小: 248.5 KB
  • 大小: 307.5 KB
分享到:
评论
5 楼 hwjd2008 2013-12-14  
游戏设置的功能没有哦,看来要自己添加下了,呵呵
4 楼 guenli 2013-03-28  
很好,我很喜欢啊!
3 楼 虎踞龙盘忆江南 2012-04-20  
 
2 楼 xuye0451 2011-11-25  
居然带声音的。。。我是上班的时候研究你代码的。。。
1 楼 y13872888163 2011-10-22  
很好 很邪恶

相关推荐

    (android源码)帮美女更衣

    【标题】"(android源码)帮美女更衣"揭示了这是一个基于Android平台的游戏应用,其核心功能是允许用户操作游戏中的角色更换衣物。在Android开发中,源码是理解应用工作原理、学习编程技巧以及进行二次开发的重要...

    android 帮美女更衣源码

    在Android平台上,开发一款名为“帮美女更衣”的小游戏,涉及到许多关键的编程和技术知识点。首先,我们需要了解Android应用的基本架构,它通常基于组件模型,包括Activity、Service、BroadcastReceiver和...

    高仿帮美女更衣系列源码(1)

    【标题】"高仿帮美女更衣系列源码(1)"主要涉及到的是在Android平台上开发的一款模拟游戏的源代码,旨在提供一个类似"帮美女更衣"的应用体验。这样的应用通常包含各种服装、配饰的选择,用户可以自由搭配,为虚拟...

    替美女更衣源码

    首先,“替美女更衣源码”指的是一款小游戏应用的源代码。此类游戏一般允许用户为虚拟角色更换衣物,这一过程不仅仅是为了娱乐,也为了提升游戏体验。源代码是整个游戏应用的根本,它包含了程序员精心设计的算法和...

    Android游戏removeClothForBeautyGirl_美女更衣源码

    Android removeClothForBeautyGirl_美女更衣安卓游戏Java源码,点击ImageSwitcher显示的图片即可切换到为美女换衣全屏界面,手指在界面上滑动,滑动处的衣服就被褪掉了。其实是两张图片,一张底图,一张上面的图,...

    美女图片微信小程序源码

    总结来说,利用"美女图片微信小程序源码"搭建小程序,需要掌握微信小程序开发的基本技能,理解源码结构,进行适当的二次开发,配置并运营广告,同时持续优化和推广。这是一条结合技术与营销的创新之路,对于想要在...

    android 小游戏 美女密码源码

    总结来说,"android 小游戏 美女密码源码" 是一个面向Android开发者的实践案例,它提供了从零开始了解和学习游戏开发的宝贵机会。无论是对Android应用开发感兴趣的新手,还是寻求新项目灵感的资深开发者,都能从中...

    Android游戏源码安卓美女拼图游戏

    《Android游戏源码安卓美女拼图游戏》是一个适合Android初学者和高级开发者研究的项目,它揭示了Android游戏开发的基本原理和实践技巧。通过分析这个游戏的源码,我们可以深入理解Android应用开发的核心技术和游戏...

    Android小游戏安卓游戏源码45款合集.zip

    Android小游戏安卓游戏源码45款合集: 21点游戏源码.rar Angle v1.0.ZIP Barrage_OpenGLES.rar Billiard_2D.zip catcake-0.9.5-android.tar.gz Chess.rar Crackedcarrot.rar CrazyFootBall.zip EggGame.rar Elose-wr....

    Android应用源码美女图集瀑布流看图项目源码

    本项目是一个基于安卓的美女图片项目源码,被作者分成了气质、校花、时尚、素颜、唯美、清纯、可爱、长发、小清新、嫩萝莉等十多个分类,所有图片都是异步通过网络下载,以瀑布流的方式展示。大部分代码有详细的中文...

    Android美女拼图源码

    Android美女拼图源码是一个基于Android平台的休闲娱乐应用,它允许用户将预设或自定义的图片分割成若干小块,然后进行拼接,形成完整的图像。这个项目对于Android开发者来说,是学习游戏开发、图像处理以及用户体验...

    【微信小程序-毕设期末大作业】美女福利图片微信小程序源码.zip

    【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大作业】微信小程序源码 【微信小程序-毕设期末大...

    android美女连连看游戏源码

    总的来说,"美女连连看"游戏源码展示了Android游戏开发的基本流程和技术要点,包括UI设计、图形算法、数据结构、状态管理以及架构模式的应用。对于想要学习Android游戏开发的开发者来说,这是一个很好的实践案例,...

    Android应用源码妄撮chocolate撕美女衣服游戏

    本源码是一个妄撮chocolate的安卓版小游戏的项目源码,项目本身比较比较小实现也比较简单,只有四个java文件,源码没有注释,这类游戏用一句话概况就是:挑战裸露极限满足偷窥欲(听起来好吊),就是这样,需要的...

    Android小游戏(美女)

    本文将围绕“Android小游戏(美女)”这个主题,详细讲解相关知识点,包括Android游戏开发基础、源码结构分析以及无广告改良版的实现。 一、Android游戏开发基础 1. Android SDK:所有Android应用开发都基于Android...

    经典Android开发源码之游戏系

    教程名称: 经典Android开发源码之游戏系【】【经典Android游戏源码10】Android钻石迷情源码【】【经典Android游戏源码11】2048小游戏源码【】【经典Android游戏源码12】Android简单炮台塔防小游戏源码【】【经典...

    Android游戏源码安卓美女拼图游戏第二版

    总结,通过分析这个“安卓美女拼图游戏第二版”的源码,开发者不仅可以掌握Android游戏开发的基本流程和技术,还能了解到如何将理论知识应用于实际项目中,从而提升自己的编程技能和解决问题的能力。对于有志于...

    微信小程序开发-美女福利图片案例源码.zip

    微信小程序是一种轻量级的应用开发平台,主要针对移动端,由腾讯公司推出,旨在提供便捷的、无需下载安装即可使用的应用体验。在这个“微信小程序开发-美女福利图片案例源码.zip”压缩包中,包含了用于教学或参考的...

Global site tag (gtag.js) - Google Analytics