1.重写一个实现View.OnTouchListener的类,这里使用的是Matrix实现

import android.graphics.Matrix;import android.graphics.PointF;import android.view.MotionEvent;import android.view.View;import android.widget.ImageView;public class MulitPointTouchListener implements View.OnTouchListener{    private static final String TAG = "Touch";    // These matrices will be used to move and zoom image    Matrix matrix = new Matrix();    Matrix savedMatrix = new Matrix();    // We can be in one of these 3 states    static final int NONE = 0;    static final int DRAG = 1;    static final int ZOOM = 2;    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;        // Log.e("view_width",        // view.getImageMatrix()..toString()+"*"+v.getWidth());        // Dump touch event to log        dumpEvent(event);        // Handle touch events here...        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 void dumpEvent(MotionEvent event) {        String names[] = { "DOWN", "UP", "MOVE", "CANCEL", "OUTSIDE",                "POINTER_DOWN", "POINTER_UP", "7?", "8?", "9?" };        StringBuilder sb = new StringBuilder();        int action = event.getAction();        int actionCode = action & MotionEvent.ACTION_MASK;        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("]");    }    private float spacing(MotionEvent event) {        float x = event.getX(0) - event.getX(1);        float y = event.getY(0) - event.getY(1);        return (float)Math.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);    }}

2.使用

imgTest.setOnTouchListener(new MulitPointTouchListener());

3.缺陷:图片的缩放和拖动都是在原图片大小的那块区域展现,放大的话,放大的部分都被遮住了,如果是移动的话,可能把图片给移动没了。

更多相关文章

  1. 图片循环滑动
  2. android res目录下存放图片文件夹 i m h xh xxh
  3. 【Android】自定义ImageView高度自适应,宽度成比例缩放
  4. 在TextView上显示图片信息
  5. 在android中实现两张图片对比
  6. Android 获取网络图片方法
  7. Android代码总结,Sdcard和图片相关
  8. android图片缩放(指定大小) drawable获取图片后怎么设置图片大小

随机推荐

  1. 定义各种事物的类型
  2. Activity加载模式
  3. android 内存泄漏原因及解决方案
  4. Android(安卓)获取APK编译时间
  5. 【使用LeanCloud】在Android中添加一行数
  6. Android笔记之:onConfigurationChanged详
  7. hello,Android
  8. Android(安卓)Button按钮点击变换字体颜
  9. 一个Activity的显示过程总结(二)
  10. 【android studio】 gradle配置成本地离