移动前:

移动后:

代码:

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     }

源码下载

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. 【Android(安卓)开发教程】获取预设信息
  3. Drawable、Bitmap、byte[]之间的转换 (转)
  4. eclipse中跳转查看android类的源码
  5. android上代码去执行"su"命令
  6. 按钮的隐藏与不可见
  7. Android(安卓)代码名字-版本号-API级别-NDK版本对应关系
  8. Android(安卓)微信分享
  9. android自动关机代码

随机推荐

  1. android的api文档里Fragments翻译(未完)
  2. Android(安卓)API :SMS短信服务处理和获取
  3. Android(安卓)常见面试题
  4. 怎样成为一名Android开发者
  5. 使用Firebase云消息传递在Android中推送
  6. Android开发指南-框架主题-内容提供器
  7. Kotlin实战(三): 动手撸个玩Android客户端
  8. Android调用系统相机获取返回数据
  9. android移植 十之一 lcd课题
  10. 全副武装!AndroidUI自动化测试在RxImagePi