Android实现对imageview的拖动以及缩放
来源:互联网 发布:ajax跨域php 编辑:程序博客网 时间:2024/06/05 01:16
package org.wch.gesture;
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;
import android.widget.ImageView.ScaleType;
public class MulitPointTouchListener implements OnTouchListener {
Matrix matrix = new Matrix();
Matrix savedMatrix = new Matrix();
public ImageView image;
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 MulitPointTouchListener(ImageView image) {
super();
this.image = image;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
this.image.setScaleType(ScaleType.MATRIX);
ImageView view = (ImageView) v;
// dumpEvent(event);
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
Log.w("FLAG", "ACTION_DOWN");
matrix.set(view.getImageMatrix());
savedMatrix.set(matrix);
start.set(event.getX(), event.getY());
mode = DRAG;
break;
case MotionEvent.ACTION_POINTER_DOWN:
Log.w("FLAG", "ACTION_POINTER_DOWN");
oldDist = spacing(event);
if (oldDist > 10f) {
savedMatrix.set(matrix);
midPoint(mid, event);
mode = ZOOM;
}
break;
case MotionEvent.ACTION_UP:
Log.w("FLAG", "ACTION_UP");
case MotionEvent.ACTION_POINTER_UP:
Log.w("FLAG", "ACTION_POINTER_UP");
mode = NONE;
break;
case MotionEvent.ACTION_MOVE:
Log.w("FLAG", "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的拖动以及缩放
- Android实现对imageview的拖动以及缩放
- Android实现对imageview的拖动以及缩放
- 自定义ImageView实现图片的拖动、缩放和边界回弹
- 自定义ImageView实现拖动,缩放,旋转功能
- 自定义ImageView实现拖动、旋转、缩放功能
- Android之实现手势缩放的ImageView
- Android ImageView手势缩放完整的实现
- Android-实现图片的拖动和缩放
- Android实现图片的缩放和拖动
- Android自定义imageview可对图片进行多点缩放和拖动
- android-ImageView的拖动、旋转、缩放、边界回弹、双击缩放、单击销毁及源码下载
- 自定义的ImageView控制,可对图片进行多点触控缩放和拖动
- ImageView实现对图片的缩放和旋转
- Android开发之ImageView通过matrix实现两点缩放和图片拖动
- Android imageview图片缩放实现
- Android对图片的各种平移,缩放,拖动
- 自定义类继承ImageView 实现多点图片触碰的拖动和缩放
- Xcode官方文档安装路径和Xcode模拟器安装路径
- c# 全局热键
- C# 动态加载插件的实现
- CheckListBox的使用方法
- andriod 按钮事件 与 进度条事件
- Android实现对imageview的拖动以及缩放
- Asp.net C# 连接access 的办法
- ASP.NET打开新页面总结
- is—lm
- Asp.net中DetailsView中添加日历控件 及DropDownList 并实现数据同步更新
- 【转载】SQL Server 2008固定服务器/数据库角色
- 【转载】如何备份数据库和删除备份
- Asp.net 弹出消息框
- 众星哀悼马航MH370坠海 愤怒质疑求真相