前一篇《是男人就下100层【第二层】——帮美女更衣(1)》介绍了ImageSwitcher组件的使用,并完成了展示,这一篇我们来完成剩下的部分吧。
在点击图片的时候跳到另一个Activity并将该图片的序号传过去。
is.setOnClickListener(new OnClickListener() { @Override public void onClick(View v){ Intent intent = new Intent(); intent.putExtra("imagePosition", gallery.getSelectedItemPosition()); intent.setClass(MainActivity.this, RemoveClothActivity.class); startActivity(intent); } });创建一个View对象,如下:
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(); 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() { //获取屏幕信息 DisplayMetrics dm = new DisplayMetrics(); dm = this.getResources().getDisplayMetrics(); //获取屏幕宽度 int screenWidth = dm.widthPixels; //获取屏幕高度 int screenHeight = dm.heightPixels; SCREEN_W = screenWidth; SCREEN_H = screenHeight; } private Bitmap createBitmapFromSRC() { return BitmapFactory.decodeResource(getResources(), R.drawable.icon1); } 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); } 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); } 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); } private void seticon1Bitmap(Bitmap bm) { // 设置画笔 mPaint = new Paint(); //设置透明度为0 mPaint.setAlpha(0); //设置两张图片相交时的模式 //详细请参考:http://trylovecatch.iteye.com/blog/1189452 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); mPath = new Path(); //创建一张图片 mBitmap = Bitmap.createBitmap(SCREEN_W, SCREEN_H, Config.ARGB_8888); mCanvas = new Canvas(); //设置为画布背景 mCanvas.setBitmap(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); // 开始绘制 mCanvas.drawPath(mPath, mPaint); // 重新开始绘制路线 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; } }
具体请看代码注释
基本原理请看:http://blog.csdn.net/dawanganban/article/details/17439667
源代码下载:http://download.csdn.net/detail/lxq_xsyu/7014889