2015-01-14 3 views
1

Это мой сенсорный Слушатель Класс:Android Multitouch Dynamic ImageView Drag только недавно добавил ImageView

public class Touch_Listner implements OnTouchListener{ 


// these matrices will be used to move and zoom image 
private Matrix matrix = new Matrix(); 
private Matrix savedMatrix = new Matrix(); 
// we can be in one of these 3 states 
private static final int NONE = 0; 
private static final int DRAG = 1; 
private static final int ZOOM = 2; 
private int mode = NONE; 
// remember some things for zooming 
private PointF start = new PointF(); 
private PointF mid = new PointF(); 
private float oldDist = 1f; 
private float d = 0f; 
private float newRot = 0f; 
private float[] lastEvent = null; 
public boolean onTouch(View v, MotionEvent event) { 
    // handle touch events here 
    ImageView view = (ImageView) v; 
    switch (event.getAction() & MotionEvent.ACTION_MASK) { 
     case MotionEvent.ACTION_DOWN: 
      savedMatrix.set(matrix); 
      start.set(event.getX(), event.getY()); 
      mode = DRAG; 
      lastEvent = null; 
      break; 
     case MotionEvent.ACTION_POINTER_DOWN: 
      oldDist = spacing(event); 
      if (oldDist > 10f) { 
       savedMatrix.set(matrix); 
       midPoint(mid, event); 
       mode = ZOOM; 
      } 
      lastEvent = new float[4]; 
      lastEvent[0] = event.getX(0); 
      lastEvent[1] = event.getX(1); 
      lastEvent[2] = event.getY(0); 
      lastEvent[3] = event.getY(1); 
      d = rotation(event); 
      break; 
     case MotionEvent.ACTION_UP: 
     case MotionEvent.ACTION_POINTER_UP: 
      mode = NONE; 
      lastEvent = null; 
      break; 
     case MotionEvent.ACTION_MOVE: 
      if (mode == DRAG) { 
       matrix.set(savedMatrix); 
       float dx = event.getX() - start.x; 
       float dy = event.getY() - start.y; 
       matrix.postTranslate(dx, dy); 
      } 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); 
       } 
       if (lastEvent != null && event.getPointerCount() == 3) { 
        newRot = rotation(event); 
        float r = newRot - d; 
        float[] values = new float[9]; 
        matrix.getValues(values); 
        float tx = values[2]; 
        float ty = values[5]; 
        float sx = values[0]; 
        float xc = (view.getWidth()/2) * sx; 
        float yc = (view.getHeight()/2) * sx; 
        matrix.postRotate(r, tx + xc, ty + yc); 
       } 
      } 
      break; 
    } 

    view.setImageMatrix(matrix); 
    return true; 
} 

/** 
* 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); 
} 

/** 
* Calculate the degree to be rotated by. 
* 
* @param event 
* @return Degrees 
*/ 
private float rotation(MotionEvent event) { 
    double delta_x = (event.getX(0) - event.getX(1)); 
    double delta_y = (event.getY(0) - event.getY(1)); 
    double radians = Math.atan2(delta_y, delta_x); 
    return (float) Math.toDegrees(radians); 
} 

} }

Создание динамического ImageView с помощью следующего метода:

private void Add_Imageview(final String btn_id,Bitmap resource) { 
    ImageView image = new ImageView(this); 
      FrameLayout.LayoutParams params = new FrameLayout.LayoutParams( 
        FrameLayout.LayoutParams.FILL_PARENT, 
        FrameLayout.LayoutParams.FILL_PARENT); 

      Display display = getWindowManager().getDefaultDisplay(); 
       int width = display.getWidth(); // deprecated 
       int height = display.getHeight(); // deprecated 

    image.setScaleType(ImageView.ScaleType.MATRIX); 
      image.setImageBitmap(resource); 
      image.setTag(btn_id); 
      image.setId(imgview_index); 
      rel_image.addView(image); 
      image.getLayoutParams().height = rel_image.getHeight(); 
      image.getLayoutParams().width = rel_image.getWidth(); 

      int[] values = new int[2]; 
      image.getLocationOnScreen(values); 
      System.out.println("x location::"+values[0]); 
      System.out.println(" y location::"+values[1]); 


      image.setOnTouchListener(new Touch_Listner()); 

}

, когда я вызываю этот метод более одного раза, перетаскиваем его y недавно добавлено Imageview Я хочу перемещать вращать zoom любое изображение в любое время

ответ

Смежные вопросы