Android拖動圖片及多層圖片疊加


移動前:

 

移動后:

 

代碼:

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     }

 

源碼下載

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM