全是以前的 一些例子,也是学习别人的。拿出来和大家分享,经常用到的功能




所有代码了。

public class MainActivity extends Activity {    private ImageView imageView;    @Override    public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);                    setContentView(R.layout.activity_main);            imageView = (ImageView) findViewById(R.id.imageView);            imageView.setOnTouchListener(new OnTouchListener() {            // 设置开始点            private PointF startPoint = new PointF();            // 设置图片位置的变换矩阵            private Matrix matrix = new Matrix();            // 设置图片当前位置的变换矩阵            private Matrix currentMatrix = new Matrix();            // 初始化模式参数            private int mode = 0;            // 无模式            private static final int NONE = 0;            // 拖拉模式            private static final int DRAG = 1;            // 缩放模式            private static final int ZOOM = 2;            // 开启缩放效果的门槛            private static final float ZOOM_THRESHOLD = 10.0f;            // 开始距离            private float startDistance;            // 中心点            private PointF middlePoint;                        @Override            public boolean onTouch(View v, MotionEvent event) {                            switch (event.getAction() & MotionEvent.ACTION_MASK) {                case MotionEvent.ACTION_DOWN:                    mode = DRAG;                    // 记录图片当前的移动位置                    currentMatrix.set(imageView.getImageMatrix());                    // 记录开始坐标                    startPoint.set(event.getX(), event.getY());                    break;                                     // 当屏幕上已经有触点(手指),再有手指按下时触发该事件                case MotionEvent.ACTION_POINTER_DOWN:                    mode = ZOOM;                    //得到两点间的距离                    startDistance = getDistance(event);                    //如果大于                    if(startDistance > ZOOM_THRESHOLD) {                    //得到两点的中间点                        middlePoint = getMiddlePoint(event);                        // 记录图片当前的缩放比例                        currentMatrix.set(imageView.getImageMatrix());                    }                    break;                               case MotionEvent.ACTION_MOVE:                    if(mode == DRAG) {                        // 获取X轴移动距离                        float distanceX = event.getX() - startPoint.x;                        // 获取Y轴移动距离                        float distanceY = event.getY() - startPoint.y;                        // 在上次移动停止位置的基础上再进行移动                        matrix.set(currentMatrix);                        // 实现图片位置移动                        matrix.postTranslate(distanceX, distanceY);                     }else if(mode == ZOOM) {                        // 结束距离                        float endDistance = getDistance(event);                        if(endDistance > ZOOM_THRESHOLD) {                            // 缩放比例                            float scale = endDistance / startDistance;                            matrix.set(currentMatrix);                            matrix.postScale(scale, scale, middlePoint.x, middlePoint.y);                        }                    }                    break;                                    case MotionEvent.ACTION_UP:                // 当手指离开屏幕,但屏幕上仍有其他触点(手指)时触发该事件                case MotionEvent.ACTION_POINTER_UP:                    mode = 0;                    break;                 }                imageView.setImageMatrix(matrix);                return true;            }        });    }            /**     * 计算两点之间的距离     */    public static float getDistance(MotionEvent event) {        //第二个点x、y坐标减去第一个点x、y坐标        float disX = event.getX(1) - event.getX(0);        float disY = event.getY(1) - event.getY(0);        return FloatMath.sqrt(disX * disX + disY * disY);    }        /**     * 计算两点之间的中间点     */    public static PointF getMiddlePoint(MotionEvent event) {        float midX = (event.getX(0) + event.getX(1)) /2;        float midY = (event.getY(0) + event.getY(1)) /2;        return new PointF(midX, midY);    }    }


更多相关文章

  1. Android手势控制实现缩放、移动图片
  2. Android源码大放送(实战开发必备)
  3. Android简单明了的使用属性动画ObjectAnimator 旋转 平移 渐变
  4. Android(安卓)RecycerView 中根据图片大小自适应控件大小的实现
  5. 运行时改变Button图片的android:drawableTop
  6. Fresco使用的注意事项
  7. 让一个小图片重复出现,形成一张大图片
  8. Android(安卓)studio(AS) svg图片使用
  9. Android(安卓)chrisbanes-PhotoView 使用案例

随机推荐

  1. android 游戏开发-libgdx(一)
  2. android 线程方式打印log到sd卡
  3. android 获取手机中所有的传感器Sensor类
  4. android 入门 Gallery
  5. Android 断点续传
  6. Android(安卓)TextView drawText BaseLin
  7. API 25 (Android 7.1.1 API) widget.Spin
  8. Android sensor 理解及架构
  9. android 滚动的缓冲图片
  10. Android Untold Stories --- Selector an