- 浏览: 596545 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (154)
- java (31)
- Struts (3)
- Hibernate (8)
- Spring (6)
- JS (14)
- DWR (1)
- Oracle (1)
- SQL Server (0)
- JSF (0)
- JPA (0)
- Grails (3)
- Ajax (1)
- Extjs (0)
- jQuery (4)
- MySQL (2)
- 正则表达式 (2)
- 其他 (6)
- 计算机应用 (7)
- Groovy (8)
- Google (1)
- Web (2)
- MongoDB Java Driver (1)
- mongodb (1)
- Linux (3)
- HTML (1)
- Tomcat (3)
- Eclipse (2)
- JSP (1)
- 缓存 (1)
- 动态 (1)
- 问题与解决 (3)
- HY (1)
- Android (35)
- LBS (1)
最新评论
-
u012136165:
list 方法:纠正:[2,5].add(1,9) ...
Groovy的list和map -
bruce.yuan:
误人子弟的文章。已经看到N个人转了这个帖子,这要贻害多少新人啊 ...
理解并解决GBK转UTF-8奇数中文乱码 -
思念-悲伤:
特意登录上来,感谢下!
理解String的compareTo()方法返回值 -
bo_hai:
总结的好,有效。
理解String的compareTo()方法返回值 -
u012678420:
在onCreate方法中获取某个View的宽度和高度
import android.graphics.Matrix; import android.graphics.PointF; import android.util.FloatMath; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.ImageView; public class MulitPointTouchListener implements OnTouchListener { Matrix matrix = new Matrix(); Matrix savedMatrix = new Matrix(); //初始状态值 private final int NONE = 0; private final int DRAG = 1; private final int ZOOM = 2; private int mode = NONE; // Remember some things for zooming PointF start = new PointF(); PointF mid = new PointF();//放大或缩小中间点 float oldDist = 1f; @Override public boolean onTouch(View v, MotionEvent event) { ImageView view = (ImageView) v; analyseEvent(event);//Log分析事件类型,屏幕每个点的坐标 //处理事件 switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: matrix.set(view.getImageMatrix()); savedMatrix.set(matrix); start.set(event.getX(), event.getY()); mode = DRAG; //Log.d("CDH", "mode=DRAG"); break; case MotionEvent.ACTION_POINTER_DOWN: oldDist = spacing(event); //Log.d("CDH", "oldDist=" + oldDist); if (oldDist > 10f) { savedMatrix.set(matrix); midPoint(mid, event); mode = ZOOM; //Log.d("CDH", "mode=ZOOM"); } break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_POINTER_UP: mode = NONE; //Log.e(""CDH"", "W:"+view.getWidth()+" H:"+view.getHeight()); break; case MotionEvent.ACTION_MOVE: if (mode == DRAG) { matrix.set(savedMatrix); matrix.postTranslate(event.getX() - start.x, event.getY() - start.y); } else if (mode == ZOOM) { float newDist = spacing(event); //Log.d("CDH", "newDist=" + newDist); if (newDist > 10f) { matrix.set(savedMatrix); float scale = newDist / oldDist; matrix.postScale(scale, scale, mid.x, mid.y); } } break; } view.setImageMatrix(matrix); return true; } private void analyseEvent(MotionEvent event) { String names[] = { "DOWN", "UP", "MOVE", "CANCEL", "OUTSIDE", "POINTER_DOWN", "POINTER_UP", "7?", "8?", "9?" }; int action = event.getAction(); int actionCode = action & MotionEvent.ACTION_MASK; StringBuilder sb = new StringBuilder(); sb.append("event ACTION_").append(names[actionCode]); if (actionCode == MotionEvent.ACTION_POINTER_DOWN || actionCode == MotionEvent.ACTION_POINTER_UP) { sb.append("(pid ").append(action >> MotionEvent.ACTION_POINTER_ID_SHIFT); sb.append(")"); } sb.append("["); for (int i = 0; i < event.getPointerCount(); i++) { sb.append("#").append(i); sb.append("(pid ").append(event.getPointerId(i)); sb.append(")=").append((int) event.getX(i)); sb.append(",").append((int) event.getY(i)); if (i + 1 < event.getPointerCount()) sb.append(";"); } sb.append("]"); Log.d("CDH", sb.toString()); } //两点间的距离 private float spacing(MotionEvent event) { float x = event.getX(0) - event.getX(1); float y = event.getY(0) - event.getY(1); return FloatMath.sqrt(x * x + y * y); } //从两点中间放大或缩小 private void midPoint(PointF point, MotionEvent event) { float x = event.getX(0) + event.getX(1); float y = event.getY(0) + event.getY(1); point.set(x / 2, y / 2); } }
创建好上面的OnTouchListener实现类后,设置到ImageView上
ImageView mImageView = (ImageView)findViewById(R.id.image_view); mImageView.setOnTouchListener(new MulitPointTouchListener());
设置属性android:scaleType="matrix"
<ImageView android:id="@+id/image_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:scaleType="matrix" android:src="@drawable/landscape" />
发表评论
-
深入分析AIDL原理
2011-11-13 16:14 25395在上一篇文章(Service使用方式)中,介绍了Android ... -
Service使用方式
2011-11-13 15:23 6055使用Service的场合: ... -
在onCreate方法中获取某个View的宽度和高度
2011-10-08 14:54 14467有时候需要在onCreate方法中知道某个View组件的宽度和 ... -
不加载图片,仅仅获取图片文件分辨率
2011-10-08 11:09 3977当从SD卡中获取图片时,如果图片太大,加载会出现溢出异常。因此 ... -
定时任务
2011-09-28 00:53 1518定时任务有执行一次和重复执行两种 public cla ... -
几种创建LayoutInflater对象的方法
2011-09-28 00:51 1871LayoutInflater layoutInflate ... -
判断网络类型及是否有网络
2011-09-28 00:49 2785判断当前是否有可用网络 public boolean ... -
设置全屏
2011-09-26 23:40 19241.编程方式 public void setFullS ... -
dip与px单位之间转换
2011-09-25 10:11 1643//转换dip为px public static in ... -
屏幕尺寸(高、宽)
2011-09-25 10:11 1900Display display = getWindowM ... -
判断手机外存(SD卡)状态
2011-09-25 10:07 2162public int getExternalStorag ... -
SQLite数据类型
2011-09-25 10:03 9354一般数据采用的固 ... -
使用WebView实现腾讯微博OAuth登录
2011-09-24 21:11 4890接着上一篇文章"使用WebView实现新浪微博OAu ... -
使用WebView实现新浪微博OAuth登录
2011-09-20 12:18 8505#新浪官方下载SDK(weibo4android) h ... -
高效率下载图片——防止内存溢出
2011-09-18 13:09 2235在应用中经常需要下载很多的图片,因此,写好图片下载部分的代码非 ... -
PopupWindow使用
2011-09-16 14:05 1822使用PopupWindow来显示一个浮层 点击按钮后弹出 ... -
Android通知
2011-09-07 17:56 1930private void showNotification() ... -
AlarmManager.RTC和ELAPSED_REALTIME的区别
2011-09-04 17:33 30061AlarmManager.RTC,硬件闹钟,不唤醒手机( ... -
开机自启动
2011-09-04 13:55 1651经常会有这样的需求,当手机开机后立刻启动一个服务或者一个活动。 ... -
Android虚拟机(DVM)内存分配——内存溢出问题
2011-09-03 17:19 9922大家都知道Android的上层应用是基于 Dalvik ...
相关推荐
本Demo "《结合UImageView实现图片移动和缩放》" 就是针对这一需求的一个实例,它演示了如何创建一个名为MoveScaleImageView的自定义视图,允许用户在屏幕上自由移动和缩放图片。 首先,我们要了解...
本文将详细讲解如何利用鼠标来实现图片的移动和缩放,这两个功能在日常工作中极为常见。 首先,我们要理解的是“图片拖动”。在大多数图形应用程序中,用户可以通过按下鼠标左键并移动鼠标来移动图片。这个过程涉及...
在这个场景中,API用于控制图片的行为,如移动、缩放和加载图标。 1. **图片移动**:在用户界面上,图片移动通常涉及到图形上下文(Graphics Context)的操作。开发者可以使用API提供的方法来改变图片的位置,这在...
在C#编程环境中,图片处理是一项常见的任务,其中包括图片的缩放和移动。这两个功能在各种应用程序中都极为重要,比如图像编辑软件、图形用户界面(GUI)开发、网页设计等。本文将深入探讨如何使用C#实现这些功能。 ...
2. **事件处理**:为了实现图片的缩放和移动,我们需要捕获和处理鼠标事件,如鼠标按下、移动和释放。这些事件可以让我们跟踪用户的操作,进而计算出缩放比例和移动的距离。 3. **QGraphicsView与QGraphicsScene**...
通过查看和学习这个项目的代码,开发者可以更好地理解如何在Android中实现图片的移动、缩放和裁剪功能。 总之,Android图片裁剪涉及多个方面,包括图像处理、手势识别和UI交互。通过掌握这些技术,开发者能够创建...
在这个场景中,我们关注的是自定义`PictureBox`控件,目的是实现图片的移动和滚轮缩放功能。`PictureBox`是.NET Framework中的一个基本控件,通常用于显示图像。然而,其默认功能并不包括图片的拖动和滚轮缩放,因此...
在C#编程环境中,开发一个图片缩放和移动程序是一项常见的任务,特别是在图形用户界面(GUI)应用中。本程序是在.NET Framework 3.5环境下构建的,这意味着它利用了该框架提供的丰富的类库和功能。尽管如此,由于C#...
高清查看图片 图片缩放 图片移动 可实现在一定范围内图片移动缩放
在这个“易语言图片快速缩放移动”项目中,我们将深入探讨如何使用易语言来实现图片的快速缩放和移动功能,以及设置矩形和移动窗口的技术细节。 首先,图片的快速缩放是图像处理中的基本操作,通常涉及到图像的像素...
在这个案例中,我们将创建一个自定义组件来实现图片的缩放和移动功能。 1. **组件创建**: - 在Flex中,我们可以继承UIComponent或Canvas类来创建自定义组件。UIComponent是所有Flex组件的基础,提供了绘制和布局...
在移动端H5开发中,图片轮播和缩放功能是非常常见且重要的元素,尤其是在展示产品、分享信息或者创建互动体验时。本资源基于Sencha Touch框架,为移动设备提供了高效且用户友好的图片轮播与缩放解决方案。下面将详细...
在Windows Forms(Winform)开发中,经常需要处理图像显示和交互功能,比如图片的拖拽、移动和缩放。本篇文章将详细讲解如何在Winform应用中实现这些功能,主要涉及PictureBox控件的使用以及相关的事件处理。 首先...
通过Renderscript实现的模糊处理可以提供高质量的效果,而自定义View结合`GestureDetector`和`ScaleGestureDetector`则能实现流畅的图片移动和缩放功能。这些技术的掌握对于Android开发者来说非常重要,它们能够提升...
首先,让我们详细探讨如何使用`SurfaceView`来实现图片的缩放和移动。`SurfaceView`相比于普通的`View`,具有自己的独立绘图线程,这使得它能够更高效地处理复杂的图形操作。要实现图片的缩放和移动,我们可以利用`...
本项目"PhotoWallFallsDemo"就是一个典型的实例,演示了如何在Android应用中实现实时的图片缩放和移动功能。 首先,我们要理解Android中的触控事件处理机制。Android系统通过MotionEvent类来处理触摸事件,包括...
除了基本的缩放和移动,GDI+还支持更复杂的图像处理,如旋转、裁剪、滤镜应用等。例如,通过设置`Matrix`对象并传递给`Graphics`对象的`SetTransform`方法,可以实现图片的旋转: ```cpp Gdiplus::Matrix rotation...
在IT领域,图片的缩放和移动是图形用户界面(GUI)设计中常见的功能,尤其在图像处理软件、网页和应用程序中。标题“图片手动缩放移动、单击退出、双击缩放”所涉及的知识点主要是用户交互设计和图像处理技术。下面...
在这个场景下,我们不仅需要展示图片,还需要实现图片的缩放和移动功能,以增强用户体验。 首先,要实现这个功能,我们需要对ViewPager进行自定义。默认的ViewPager并不直接支持图片的缩放和移动,所以我们需要扩展...
在C# WinForm应用开发中,经常会遇到需要对图片进行操作的需求,比如显示、缩放、旋转和移动等。为了实现这些功能,开发者通常会利用自定义控件或已有的图像处理库。在这个项目中,我们关注的是一个专门用于图片操作...