2014-02-27 66 views
3

我有兩個貼紙,我希望兩個貼紙都能移動縮放旋轉。當我將ontouchlistener添加到兩個貼紙時,都會執行這些操作。如何在同一個佈局中移動兩個貼紙android

這就是我設置監聽

ImageView crown = (ImageView) root.findViewById(R.id.crown); 
    crown.setOnTouchListener(this); 

    ImageView crown1 = (ImageView) root.findViewById(R.id.crown1); 
    crown1.setOnTouchListener(this); 

我的佈局,這是xml文件

<FrameLayout 
     android:id="@+id/editpic" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_marginBottom="60dp" 
     android:layout_marginTop="40dp" 
     android:background="@drawable/thumb" > 

    <ImageView 
      android:id="@+id/crown" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:scaleType="matrix" 
      android:src="@drawable/crown1" > 
     </ImageView> 

     <ImageView 
      android:id="@+id/crown1" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:scaleType="matrix" 
      android:src="@drawable/crown2" > 
     </ImageView> 

    </FrameLayout> 

讓我知道如果任何人有這個解決方案的代碼。

更新:

public boolean onTouch(View v, MotionEvent event) { 
     Log.e(TAG, "onTouch !!"); 
     ImageView view = (ImageView) v; 



     // Handle touch events here... 
     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); 
       matrix.postTranslate(event.getX() - start.x, event.getY() 
         - start.y); 
      } else if (mode == ZOOM && event.getPointerCount() == 2) { 
       float newDist = spacing(event); 
       matrix.set(savedMatrix); 
       if (newDist > 10f) { 
        float scale = newDist/oldDist; 
        matrix.postScale(scale, scale, mid.x, mid.y); 
       } 
       if (lastEvent != null) { 
        newRot = rotation(event); 
        float r = newRot - d; 
        matrix.postRotate(r, view.getMeasuredWidth()/2, 
          view.getMeasuredHeight()/2); 
       } 
      } 
      break; 
     } 

     view.setImageMatrix(matrix); 

     return true; 
    } 

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

    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); 
    } 
+0

'onTouch()'的代碼在哪裏? –

+0

檢查更新..我已經添加了代碼 –

回答

1

你必須在條件onTouch()方法中添加代碼不同viewId

嘗試這樣

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    // TODO Auto-generated method stub 
    switch (v.getId()) { 

    case R.id.crown: 
     // put code for 1st crown touch 
     break; 
    case R.id.crown1: 
     // put code for 2nd crown touch 
     break; 

    default: 
     break; 
    } 
    return true; 
} 
+0

返回false不工作.. –

+0

我已經給imageview參數作爲fillparent,所以只有一個圖像做操作..但如果給定包裝內容圖像不移動在整個佈局 –

+0

返回假不工作?意味着? –

0

是的,我知道我該死晚,但認爲分享,這樣它可以幫助其他人在未來..

如果你想要做移動,調整大小,縮放,旋轉,在相同的佈局超過2次你可以去android multi-touch controller,它簡化了MotionEvent接觸點API的有點混亂和不一致。

控制器還支持捏縮放,包括跟蹤屏幕座標和對象座標之間的轉換。

控制器最近更新爲支持夾捏旋轉,允許您使用屏幕上的兩個觸摸點在物理上扭曲物體。

控制器可以非常容易地使用單獨物體(例如一疊照片)的畫布進行操作,每個物體都可以單獨用單個觸摸點拖動或用捏操作縮放。

相關問題