標籤:
移動前:
移動後:
代碼:
1 // 兩個用來疊加的圖片2 ImageView mIv;3 ImageView mIv2;4 // 顯示繪製後的映像5 ImageView mImageView;6 Canvas canvas;7 8 int lastX, lastY;
1 @Override 2 protected void onCreate(Bundle savedInstanceState) { 3 super.onCreate(savedInstanceState); 4 setContentView(R.layout.main); 5 6 mImageView = (ImageView) findViewById(R.id.conta); 7 mImageView.setImageResource(R.drawable.a); 8 mImageView.setDrawingCacheEnabled(true);// 啟用緩衝 9 10 mIv2 = (ImageView) findViewById(R.id.img2);11 mIv2.setDrawingCacheEnabled(true);12 mIv2.setOnTouchListener(this); 13 14 mIv = (ImageView) findViewById(R.id.img);15 mIv.setDrawingCacheEnabled(true);16 mIv.setOnTouchListener(this); 17 }
以下是移動的關鍵代碼
1 @Override 2 public boolean onTouch(View v, MotionEvent event) { 3 4 switch (event.getAction()) { 5 6 case MotionEvent.ACTION_DOWN: 7 lastX = (int) event.getRawX(); 8 lastY = (int) event.getRawY(); 9 10 break;11 case MotionEvent.ACTION_MOVE:12 13 int dx = (int) event.getRawX() - lastX;14 int dy = (int) event.getRawY() - lastY;15 16 int left = v.getLeft() + dx;17 int top = v.getTop() + dy;18 int right = v.getRight() + dx;19 int bottom = v.getBottom() + dy;20 21 22 Log.i("life", " left = " + left + " v.getLeft=" + v.getLeft() + " ; event.getRawX = "
+ event.getRawX() + " ; lastX = " + lastX + " dx = " + dx);26 27 v.layout(left, top, right, bottom);28 29 lastX = (int) event.getRawX();30 lastY = (int) event.getRawY();31 32 break;33 case MotionEvent.ACTION_UP:34 35 break;36 }37 38 return true;39 }
save按鈕的事件處理
1 @SuppressLint("NewApi") 2 public void save(View view) { 3 // 儲存疊加的圖片 4 Bitmap bitmap = mImageView.getDrawingCache(); 5 if (canvas == null) { 6 canvas = new Canvas(bitmap); 7 } 8 // 根據兩個機器人的位置繪製 9 canvas.drawBitmap(mIv.getDrawingCache(), mIv.getLeft(),mIv.getTop(), null);10 canvas.drawBitmap(mIv2.getDrawingCache(), mIv2.getLeft(),mIv2.getTop(), null);11 12 // 顯示在介面上13 mImageView.setImageBitmap(bitmap);14 15 // 儲存至本地16 File f = new File(getCacheDir().getAbsolutePath() + "/"17 + SystemClock.currentThreadTimeMillis() + "img.jpg");18 try {19 saveMyBitmap(f, bitmap);20 } catch (IOException e) {21 e.printStackTrace();22 }23 24 // 將兩個機器人設定不可見25 mIv.setVisibility(View.GONE);26 mIv2.setVisibility(View.GONE);27 }
源碼下載
Android拖動圖片及多層圖片疊加