如何启用(两指)放大/缩小功能,在Android的图像 [英] How to enable the (two finger) zoom in/out feature for an image in android

查看:214
本文介绍了如何启用(两指)放大/缩小功能,在Android的图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

可能重复:
  <一href="http://stackoverflow.com/questions/4227451/android-imageview-setting-drag-and-pinch-zoom-parameters">android ImageView的:设置阻力和双指缩放参数

我很新至Android ..我有一个形象的看法在我的布局..我想启用放大和缩小的图像从该图像视图即将..变焦应在两个手指触摸来完成。 。 谁能告诉我如何做到这一点,

I am very new to android .. I have an image view in my layout .. I want to enable the zoom in and zoom out for the image coming from this image view .. zoom should be done on two finger touch .. can anyone tell me how to accomplish this,

谢谢

拉​​吉

推荐答案

看这

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;
static final int DRAW =3;
int mode = NONE;

// Remember some things for zooming
PointF start = new PointF();
PointF mid = new PointF();
float oldDist = 1f;

// Limit zoomable/pannable image
private float[] matrixValues = new float[9];
private float maxZoom;
private float minZoom;
private float height;
private float width;
private RectF viewRect;
/////////************ touch events functions **************////////////////////
@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if(hasFocus){  init();   }
}
private void init() {
    maxZoom = 4;
    minZoom = 0.25f;
    height = myimage.getDrawable().getIntrinsicHeight()+20;
    width = myimage.getDrawable().getIntrinsicWidth()+20;
    viewRect = new RectF(0, 0, myimage.getWidth()+20, myimage.getHeight()+20);
}

  /////////************touch events for image Moving, panning and zooming   ***********///
public boolean onTouch(View v, MotionEvent event) {

    // Dump touch event to log
    dumpEvent(event);
    // Handle touch events here...
    switch (event.getAction() & MotionEvent.ACTION_MASK) {
    case MotionEvent.ACTION_DOWN:
        savedMatrix.set(matrix);
        start.set(event.getX(), event.getY());
        Log.d(TAG, "mode=DRAG");
        mode = DRAG;
        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.d(TAG, "mode=NONE");
        break;
    case MotionEvent.ACTION_MOVE:
        if (mode == DRAW){ onTouchEvent(event);}
        if (mode == DRAG) {
                ///code for draging..        
        } 
     else if (mode == ZOOM) {
         float newDist = spacing(event);
         Log.d(TAG, "newDist=" + newDist);
         if (newDist > 10f) {
             matrix.set(savedMatrix);
             float scale = newDist / oldDist;
             matrix.getValues(matrixValues);
             float currentScale = matrixValues[Matrix.MSCALE_X];
             // limit zoom
             if (scale * currentScale > maxZoom) {
                 scale = maxZoom / currentScale; 
                }else if(scale * currentScale < minZoom){
                    scale = minZoom / currentScale; 
                 }
             matrix.postScale(scale, scale, mid.x, mid.y);
            }
     }
     break;
    }
    myimage.setImageMatrix(matrix);
    return true; // indicate event was handled
}

//*******************Determine the space between the first two fingers
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);
}

//************* Calculate the mid point of the first two fingers 
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的图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆