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

点击ImageSwitcher显示的图片即可切换到为美女换衣全屏界面,手指在界面上滑动,滑动处的衣服就被褪掉了,很黄很暴力,大家要hold住呀!!

其实啊这个实现就是两张图片,一张底图,一张上面的图,上面的图都被抹掉了,下面的图就出来了,主要是PorterDuff和PorterDuffXfermode的利用,APIDEMO里面也有相关的介绍。

免费下载地址在

用户名与密码都是

具体下载目录在 /pub/Android源码集锦/2011年/12月/Android小应用帮美女更衣系列一(附源码)/

好,贴出主要代码:

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(), 00, 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, 00null);            }               @Override           protected void onDraw(Canvas canvas) {                canvas.drawBitmap(mBitmap, 00null);                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;            }        }    }  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wyfxyy.html