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     }

 

源码下载

 

转载于:https://www.cnblogs.com/huangzx/p/4383757.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值