package com.fants.imageview;
import android.app.Activity;
import android.graphics.Matrix;
import android.graphics.PointF;
import android.graphics.Rect;
import android.os.Bundle;
import android.util.FloatMath;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
public class MyImageViewActivity extends Activity {
private ImageView view;
Matrix matrix = new Matrix();
Rect rect;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
view = (ImageView) findViewById(R.id.image_View);
view.setOnTouchListener(new MulitPointTouchListener());
}
private class MulitPointTouchListener implements OnTouchListener {
Matrix matrix = new Matrix();
Matrix savedMatrix = new Matrix();
static final int NONE = 0;
static final int DRAG = 1;
static final int ZOOM = 2;
int mode = NONE;
PointF start = new PointF();
PointF mid = new PointF();
float oldDist = 1f;
public boolean onTouch(View v, MotionEvent event) {
ImageView view = (ImageView) v;
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;
break;
case MotionEvent.ACTION_POINTER_DOWN:
oldDist = spacing(event);
if (oldDist > 10f) {
savedMatrix.set(matrix);
midPoint(mid, event);
mode = ZOOM;
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
mode = NONE;
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);
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 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);
}
}
}
分享到:
相关推荐
android imageview 多点触碰(Multitouch)实现图片拖拽移动缩放 RT 仿照官方版本的图片浏览效果 新手
可拖动的ImageView的实现,关键在定义一个onTouchListener,并且将ImageView的scaleType设置为matrix
Android imageview 多点触碰(MultiTouch)实现图片拖拽移动缩放,下载即可运行。
Android开发之ImageView通过matrix实现两点缩放和图片拖动,内有较为详细的注释
自定义控件继承Imageview,可随意调用,附调用实例。可实现空间中图片的多种操作,拖拽,缩放,旋转
自定义ImageView控件,具有缩放和拖拽功能,适合图片的浏览,方便复用
本工具类(Android)通过传入ImageView来简单实现单指拖动图片和双指放大缩小的功能,代码中几乎对每行代码都有注释。
在手机上缩放图片和拖动要用到什么?手指对不对 那么控件上什么事件和手机有关。View.OnTouchListener 对不对。 ok,那么先新建一个Class ··· public class BaseDragZoomImageView extends ImageView implements ...
自定义imageview实现拖动、旋转、缩放等功能;
主要为大家详细介绍了Android ImageView随手势变化动态缩放图片的相关资料,感兴趣的小伙伴们可以参考一下
一个好的架构附带ImageView手势缩放和下载图片,和多图片查看
高仿微信图片浏览,支持放大,拖动,双击缩放,并可嵌套在viewPager中
通过自定义ImageView控件,在xml布局里面调用自定的组件实现图片的缩放。下面给大家分享实现代码,感兴趣的朋友一起看看吧
android 中Gallery控件相当于一个图片浏览器,将图片资源加载进去便可以显示其效果
本文实例讲述了Android编程实现图片的浏览、缩放、拖动和自动居中效果的方法。分享给大家供大家参考,具体如下: Touch.java /** * 图片浏览、缩放、拖动、自动居中 */ public class Touch extends Activity ...
实现了多点触摸的效果,可以进行拖拽,(Multitouch ImageView)效果,例子简单,不过在此基础上加入图片旋转、动态缩放、滚动动画即可。
本文实例讲述了Android实现旋转,放大,缩小图片的方法。分享给大家供大家参考,具体如下: 项目中需要做到一个预览图片的功能 最初设想自定义个一个view,在onDraw中用的是生成新的Bitmap,来放大,缩小 但由于手机...
实现imageView图片任意的移动和缩放.