2013-05-01 3 views
0

Я пытаюсь сделать pinchzoom так: zoom the imageview on the double click in viewflipper in androidУвеличить ViewFlipper

Я пытался адаптировать этот код для моего проекта, но это не работает ...

Мой код здесь (то, что я» m do wrong?)

У меня есть код для "showNext" и "showPrev" в событии onTouch, возможно, несовместим?

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. Поскольку вы каждый раз возвращаетесь к истине, он сообщает системе, что событие касания было обработано. Он не пройдет мимо ваших других событий касания, таких как ваш ScaleGestureDetector. Если вы хотите обработать другие события касания после этого, вам нужно будет вернуть false.

+0

Спасибо, Джей, но не работал, если я изменил оператор return в методе onTouch на false, я потерял функциональность внутри метода onTouch. А также масштаб не работает тоже ... – user2339197