推荐安卓开发神器(里面有各种UI特效和android代码库实例)

SDK2.1

 

将以下代码写到MulitPointTouchListener .java中,然后对你相应的图片进行OnTouchListener
比如:imageView.setOnTouchListener(new MulitPointTouchListener ());

在xml中要将图片的缩放格式改成Matrix

注:android:scaleType="matrix"

 

 package com.xstarx.111;

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 {        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());                        //Log.d(TAG, "mode=DRAG");                        mode = DRAG;                                               //Log.d(TAG, "mode=NONE");                        break;                case MotionEvent.ACTION_POINTER_DOWN:                        oldDist = spacing(event);                        //Log.d(TAG, "oldDist=" + oldDist);                        if (oldDist > 10f) {                                savedMatrix.set(matrix);                                midPoint(mid, event);                                mode = ZOOM;                                //Log.d(TAG, "mode=ZOOM");                        }                        break;                case MotionEvent.ACTION_UP:                case MotionEvent.ACTION_POINTER_UP:                        mode = NONE;                        //Log.e("view.getWidth", view.getWidth() + "");                        //Log.e("view.getHeight", 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(TAG, "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; // indicate event was handled        }        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("]");                //Log.d(TAG, 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);        }}

 

 

更多相关文章

  1. Android SSL 过程记录(证书的生成+例子代码)
  2. 直播软件源码Android 多个ImageView拖拽互换图片
  3. Android MVP 一行代码轻松解决框架替换
  4. 【Android 界面效果6】Android 控件之ImageSwitcher图片切换器
  5. Android SDK 源代码关联Eclipse
  6. android图片上传
  7. Android Glide加载图片成圆形
  8. android 通过eclipse混淆代码 打包 + proguard 总结

随机推荐

  1. Android(安卓)文件系统路径
  2. 无法找到android.os.SystemProperties解
  3. android UI设计器-droiddraw
  4. android的system.img,userdata.img,ramdi
  5. Android(安卓)微信小程序打开app,app分享
  6. android 定时熄屏
  7. Android(安卓)Q Impact
  8. Android(安卓)TextView 设置删除线
  9. S5PV210 Android(安卓)分支代码学习
  10. 查询SD卡容量信息