2013-05-07 55 views
0

我變焦的relative layout,但變焦後我無法拖動或移動zoomed layout 這是我的代碼來縮放layout..plz幫我拖放或移動zoomed layout如何拖/移動RelativeLayout的android系統

public class MainActivity extends Activity { 

View mainView = null; 
// Remember some things for zooming 
PointF start = new PointF(); 
PointF mid = new PointF(); 

float oldDist = 1f; 
PointF oldDistPoint = new PointF(); 

public static String TAG = "ZOOM"; 

static final int NONE = 0; 
static final int DRAG = 1; 
static final int ZOOM = 2; 
int mode = NONE; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mainView = (RelativeLayout) findViewById(R.id.lv); 
    mainView.setOnTouchListener(new OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      Log.d(TAG, "mode=DRAG"); 
      int DRAGUP; 
      switch (event.getAction() & MotionEvent.ACTION_MASK) { 
      case MotionEvent.ACTION_DOWN: 
       start.set(event.getX(), event.getY()); 
       Log.d(TAG, "mode=DRAG"); 
       mode = DRAG; 

       break; 
      case MotionEvent.ACTION_POINTER_DOWN: 
       oldDist = spacing(event); 
       oldDistPoint = spacingPoint(event); 
       Log.d(TAG, "oldDist=" + oldDist); 
       if (oldDist > 10f) { 
        midPoint(mid, event); 
        mode = ZOOM; 
        Log.d(TAG, "mode=ZOOM"); 
       } 
       System.out.println("current time :" 
         + System.currentTimeMillis()); 
       break;// return !gestureDetector.onTouchEvent(event); 
      case MotionEvent.ACTION_UP: 
       start.set(event.getX(), event.getY()); 
       Log.d(TAG, "mode=DRAG"); 
       mode = DRAG; 

       break; 
      case MotionEvent.ACTION_POINTER_UP: 
       Log.d(TAG, "mode=NONE"); 
       mode = NONE; 
       break; 
      case MotionEvent.ACTION_MOVE: 
       if (mode == DRAG) { 

       } else if (mode == ZOOM) { 
        PointF newDist = spacingPoint(event); 
        float newD = spacing(event); 
        Log.e(TAG, "newDist=" + newDist); 
        float[] old = new float[9]; 
        float[] newm = new float[9]; 
        Log.e(TAG, "x=" + old[0] + ":&:" + old[2]); 
        Log.e(TAG, "y=" + old[4] + ":&:" + old[5]); 
        float scale = newD/oldDist; 
        float scalex = newDist.x/oldDistPoint.x; 
        float scaley = newDist.y/oldDistPoint.y; 
        zoom(scale, scale, start); 
       } 
       break; 
      } 
      return true; 
     } 
    }); 
} 

/** 
* zooming is done from here 
*/ 
@TargetApi(Build.VERSION_CODES.HONEYCOMB) 
public void zoom(Float scaleX, Float scaleY, PointF pivot) { 
    mainView.setPivotX(pivot.x); 
    mainView.setPivotY(pivot.y); 
    mainView.setScaleX(scaleX); 
    mainView.setScaleY(scaleY); 
} 

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

private PointF spacingPoint(MotionEvent event) { 
    PointF f = new PointF(); 
    f.x = event.getX(0) - event.getX(1); 
    f.y = event.getY(0) - event.getY(1); 
    return f; 
} 

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

所以,請讓我知道什麼是我在mode == DRAG塊添加..

三江源。

回答

0

您的setOnTouchListener代碼位於onCreate中,該代碼只被調用一次。您可能需要檢查ConfigChanged或onPaint事件。我沒有使用縮放,所以只能給你提示。