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     }

源码下载

时间: 2024-10-27 14:00:23

Android拖动图片及多层图片叠加的相关文章

Android拖动和缩放图片

Android拖动和缩放图片 2014年5月9日 我们在使用应用其中常常须要浏览图片.比方在微信其中.点击图片之后能够对图片进行缩放. 本博客介绍怎样对图片进行拖拽和缩放.这首先要了解Android中的触摸机制了,在屏幕中有手指按下.手指抬起.手指移动还有多个手指触摸的动作. 我们要实现对图片的拖拽和缩放就是要基于这些动作来进行逻辑处理. 图片的拖拽主要是计算手指開始的位置与当前手指的位置关系,来进行平移的,详细能够看代码. 图片的缩放就涉及到计算两点之间的距离来得到缩放比,调用矩阵方法来达到缩

Android:res之layer-list图片叠加

layer-list可以将多个图片按照顺序层叠起来. item属性有: 如  和    叠加为: 语法:faceleft.xml <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@dra

Android -- 图片编辑:创建圆角图片

创建圆角图片的方式大同小异,最简单的就是 9.png 美工做出来的就是,这样的最省事直接设置即可. 第二种就是通过裁剪 这里的剪裁指的是根据原图我们自己生成一张新的bitmap,这个时候指定图片的目标区域为一个圆角局域.这种做法有一点需要生成一个新的bitmap,所以会消耗至少2倍的图片内存, 下面分析一下代码的含义: a.首先创建一个指定高宽的bitmap,作为输出的内容, b.然后创建一个相同大小的矩形,利用画布绘制时指定圆角角度,这样画布上就有了一个圆角矩形. c.最后就是设置画笔的剪裁方

[Android] 触屏setOnTouchListener实现图片缩放、移动、绘制和添加水印

    前一篇文章讲述了Android实现图片Matrix矩阵类缩放.旋转.对比度.亮度.饱和度处理,但是真正的图片软件都是使用触屏实现图片缩放.移动.添加水印等功能,所以该篇文章主要通过setOnTouchListener监听实现该功能.希望文章对大家有所帮助. 一.图片缩放实现     首先先简单介绍Android如何实现触屏缩放图片和移动图片,新建TouchImageViw工程.设计XML中activity_main.xml布局: <RelativeLayout xmlns:android

Android圆角图片和圆形图片实现总结

1. 概述 Android研发中经常会遇见圆角或者圆形图片的展示,但是系统中ImageView并不能直接支持,需要我们自己做一些处理,来实现圆角图片或者圆形图片,自己最近对这块的实现做了一下总结,看一下几种实现方法. 图层叠加,上层覆盖一层蒙版,遮挡图片,让图片展示出圆角或者圆形效果 重新绘制 BitmapShader Xfermode RoundedBitmapDrawable CardView,使用官方控件,自动裁剪,达到圆角或者圆形效果.(5.0以上系统) 第一种方法,很傻,不太优雅,不推

Android TextView里直接显示图片的三种方法

方法一:重写TextView的onDraw方法,也挺直观就是不太好控制显示完图片后再显示字体所占空间的位置关系.一般如果字体是在图片上重叠的推荐这样写.时间关系,这个不付源码了. 方法二:利用TextView支持部分Html的特性,直接用api赋图片.代码如下: //第一种方法在TextView中显示图片 String html = "<img src='" + R.drawable.circle + "'/>"; ImageGetter imgGett

Android中高效的显示图片之一 ——加载大图

在网上看了不少文章,发现还是官方文档介绍最详细,把重要的东西简单摘要出来.详细可看官方文档地址 ( http://www.bangchui.org/read.php?tid=9 ) . 在应用中显示图片,如果不多加小心,很容易就会使应用因为异常“java.lang.OutofMemoryError:bitmap size exceeds VM budget”而导致crash.在android中加载图片需要一定的技巧性,主要是因为: 1.通常设备资源有限,安卓设备给每个应用只分配16M的空间.当然

(转)Android学习-使用Async-Http实现图片压缩并上传功能

(转)Android学习-使用Async-Http实现图片压缩并上传功能 文章转载自:作者:RyaneLee链接:http://www.jianshu.com/p/940fc7ba39e1 让我头疼一个星期的图片批量上传服务器的问题最后受这篇文章的作者启发而解决,自己之前一直执着于通过uri地址找到图片然后上传图片,却没想过直接上传图片本身.感谢作者的博客和启发. 前言 (转载请注明出处,谢谢!) 最近在做一个小项目,项目中要实现上传图片到服务器,而这个例子是实现图片的尺寸压缩,将获取到的压缩图

Android控件上添加图片

项目中有一个点赞功能,点赞的小图标添加在点赞列表旁边,在xml里可以进行设置,也可以在代码中进行绘图. 下面是两种方法的设置: 1.xml里:一些控件:button.textView等等里面有个属性是android:drawableLeft 就可以将pic设置到text的左边.good.... 2.代码中: TextView txtlikedList = new TextView(this.getContext()); Drawable drawable= getResources().getD