Android拖动图片及多层图片叠加
16lz
2021-01-25
移动前:
移动后:
代码:
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 }
源码下载
更多相关文章
- 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
- 【Android(安卓)开发教程】获取预设信息
- Drawable、Bitmap、byte[]之间的转换 (转)
- eclipse中跳转查看android类的源码
- android上代码去执行"su"命令
- 按钮的隐藏与不可见
- Android(安卓)代码名字-版本号-API级别-NDK版本对应关系
- Android(安卓)微信分享
- android自动关机代码