2013-05-01 6 views
0

에 나는이 같은 pinchzoom을 할 노력하고있어 ... zoom the imageview on the double click in viewflipper in android줌은 ViewFlipper

내가 내 프로젝트에 해당 코드를 적응하기 위해 시도했지만 작동하지 않습니다

여기에 (내가 '무엇을 내 코드 내가 잘못하고 있니?)

또한 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