2013-05-01 65 views
0

我試圖做pinchzoom這樣的:zoom the imageview on the double click in viewflipper in android放大ViewFlipper

我試圖把該代碼適應我的項目,但它不工作...

這裏(我」我的代碼m做錯了嗎?)

此外,我有onTouch事件中的「showNext」和「showPrev」的代碼,也許不兼容?

public class PageActivity extends Activity implements OnTouchListener,, OnScaleGestureListener{ 


// Objetos del Layout, se asignarán los valores correspondientes en tiempo de ejecución. 
private LinearLayout layMain; 
private ViewFlipper vf; 

//... 

private ScaleGestureDetector mScaleDetector; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.pageviewer); 

    // Inicialización de variables y componentes del LinearLayout 
    initialize(); 

    // Al principio se carga la primera página. 
    loadPage(currPage); 
} 

private void initialize() { 
    ... 
    layMain = (LinearLayout) findViewById(R.id.pageviewerLayout); 
    layMain.setOnTouchListener((OnTouchListener) this); 


    mScaleDetector = new ScaleGestureDetector(this.getBaseContext(), (OnScaleGestureListener) this); 

    vf = (ViewFlipper) findViewById(R.id.vfBookPage); 
    ... 
} 


@Override 
public boolean onTouch(View arg0, MotionEvent arg1) { 
    //Obtengo la acción realizada en el evento "onTouch". 
    switch (arg1.getAction()){ 
    //Si sólo ha presionando la pantalla. 
    case MotionEvent.ACTION_DOWN:{ 
     // Guardo el valor de X cuando el usuario presiona la pantalla. 
     downXValue = arg1.getX(); 

     break; 
    } 

    case MotionEvent.ACTION_UP:{ 
     // Obtengo el valor de X cuando el usuario ya ha soltado el dedo de la pantalla. 
     float currentX = arg1.getX(); 

     // Voy hacia atrás: El usuario a movido el dedo hacia la derecha. 
     if (downXValue < currentX){ 
      currPage--; 
      if(loadPage(currPage)){ 
       // Asigno la animación tipo "slide_right". 
       vf.setAnimation(AnimationUtils.loadAnimation(this, R.anim.slide_right)); 
       // Y muestro la página anterior. 
       vf.showPrevious(); 
      } 
     } 

     // Voy hacia adelante: El usuario a movido el dedo hacia la izquierda. 
     if (downXValue > currentX){ 
      currPage++; 
      if(loadPage(currPage)){ 
       // Asigno la animación tipo "slide_left". 
       vf.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.slide_left)); 
       // Y muestro la siguiente página. 
       vf.showNext(); 
      } 
     } 

     break; 
    } 
    } 

    return true; 
} 


/* (non-Javadoc) 
* @see android.app.Activity#onTouchEvent(android.view.MotionEvent) 
*/ 
@Override 
public boolean onTouchEvent(MotionEvent event) { 
    // TODO Auto-generated method stub 
    mScaleDetector.onTouchEvent(event); 
    return true; 
} 

/* (non-Javadoc) 
* @see android.view.ScaleGestureDetector.OnScaleGestureListener#onScale(android.view.ScaleGestureDetector) 
*/ 
@Override 
public boolean onScale(ScaleGestureDetector arg0) { 
    // TODO Auto-generated method stub 

    //HERE DOES NOTHING! :(
    vf.startAnimation(AnimationUtils.loadAnimation(this, R.anim.zoom_enter)); 

    return false; 
} 

/* (non-Javadoc) 
* @see android.view.ScaleGestureDetector.OnScaleGestureListener#onScaleBegin(android.view.ScaleGestureDetector) 
*/ 
@Override 
public boolean onScaleBegin(ScaleGestureDetector arg0) { 
    // TODO Auto-generated method stub 
    return false; 
} 

/* (non-Javadoc) 
* @see android.view.ScaleGestureDetector.OnScaleGestureListener#onScaleEnd(android.view.ScaleGestureDetector) 
*/ 
@Override 
public void onScaleEnd(ScaleGestureDetector arg0) { 
    // TODO Auto-generated method stub 

} 

}

感謝所有!

回答

0

我相信你的onTouch()事件會在其他MotionEvent組件之前觸發。由於每次都返回true,它會告訴系統觸摸事件已被處理。它不會將它傳遞給您的其他觸摸事件,例如您的ScaleGestureDetector。如果您想要處理其他觸摸事件,則需要返回false。

+0

感謝Jay,但沒有奏效,如果我將onTouch方法中的return語句更改爲false,我將失去onTouch方法中的功能。而且變焦也不起作用... – user2339197 2013-05-01 16:04:49