本文实例为大家分享了Android手势控制实现缩放、移动图片的方法,供大家参考,具体内容如下

新建一个触摸监听器类

package com.liyong.btprinter; import android.graphics.Matrix; import android.graphics.PointF; import android.util.FloatMath; 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);   } }

编写一个xml文件

<?xml version="1.0" encoding="UTF-8"?>                

注意其中的: android:scaleType="matrix"

priviewimage.setImageBitmap(ActivityPreviewImage.click_bitmap); priviewimage=(ImageView)findViewById(R.id.priviewimage); priviewimage.setOnTouchListener(new MulitPointTouchListener()); 

以上就是Android手势控制缩放移动图片的全部代码,希望对大家的学习有所帮助。

更多相关文章

  1. Android简单明了的使用属性动画ObjectAnimator 旋转 平移 渐变
  2. Android常用控件-DatePicker以及对话框的两种使用方法
  3. android   CheckBox 用法
  4. Fresco使用的注意事项
  5. Android(安卓)chrisbanes-PhotoView 使用案例
  6. Android(安卓)webview 常用配置
  7. Android(安卓)中 AlertDialog 的多种创建方式(二)
  8. Android(安卓)手势识别
  9. 安卓控件之图片控件(ImagView)

随机推荐

  1. Android中ListActivity用法实例分析
  2. android 模拟 再按一次退出程序onKeyDown
  3. Android线程池(二)
  4. mtk平台android提速
  5. frame动画
  6. Android之Gallery和ImageSwitcher结合的
  7. android――activity添加退出动画
  8. Android 显示当前服务的代码片段
  9. Android(安卓)Studio 提示错误 default a
  10. 设置里首选网络类型由3G改成4G