Android 放大视口翻转器

Android 放大视口翻转器,android,zooming,viewflipper,pinchzoom,Android,Zooming,Viewflipper,Pinchzoom,我试着像这样做pinchzoom: 我试着使代码适应我的项目,但它不起作用 我的代码在这里(我做错了什么?) 另外,我有onTouch事件中“showNext”和“showPrev”的代码,可能不兼容 public class PageActivity extends Activity implements OnTouchListener,, OnScaleGestureListener{ // Objetos del Layout, se asignarán los valores cor

我试着像这样做pinchzoom:

我试着使代码适应我的项目,但它不起作用

我的代码在这里(我做错了什么?)

另外,我有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

}
公共类PageActivity扩展活动实现OnTouchListener、OnScaleGestureListener{
//布局的目标是,在埃切科西翁的土地上,与瓦洛雷斯的土地相对应。
私人线路布局外业主业;
私有视图翻转器vf;
//...
专用scalegestruedetector mScaleDetector;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.pageviewer);
//线性布局中的变量和组件
初始化();
//帕吉纳的原则。
加载页面(currPage);
}
私有void初始化(){
...
layMain=(LinearLayout)findViewById(R.id.pageviewerLayout);
layMain.setOnTouchListener((OnTouchListener)this);
mScaleDetector=新的ScaleGetDetector(this.getBaseContext(),(OnScaleGestureListener)this);
vf=(ViewFlipper)findViewById(R.id.vfBookPage);
...
}
@凌驾
公共布尔onTouch(视图arg0、运动事件arg1){
//在“onTouch”事件中实现目标。
开关(arg1.getAction()){
//西索洛是潘塔拉的总统。
case MotionEvent.ACTION\u DOWN:{
//在潘塔拉的乌萨里奥总统府。
downXValue=arg1.getX();
打破
}
case MotionEvent.ACTION\u UP:{
//这是一个很好的选择。
float currentX=arg1.getX();
//阿塔拉斯之声:乌萨里奥·阿莫维多·德雷查之声。
如果(向下X值<当前X){
第页--;
if(加载页(当前页)){
//Asigno la animación tipo“向右滑动”。
setAnimation(AnimationUtils.loadAnimation(这个,R.anim.slide_right));
//Y muestro la página front。
vf.showPrevious();
}
}
//瞧,这是一个很好的例子。
如果(向下X值>当前X){
currPage++;
if(加载页(当前页)){
//Asigno la animación tipo“幻灯片左”。
vf.setInAnimation(AnimationUtils.loadAnimation(这个,R.anim.slide_左));
//Y muestro la siguiente página。
vf.showNext();
}
}
打破
}
}
返回true;
}
/*(非Javadoc)
*@see android.app.Activity#onTouchEvent(android.view.MotionEvent)
*/
@凌驾
公共布尔onTouchEvent(运动事件){
//TODO自动生成的方法存根
mScaleDetector.onTouchEvent(事件);
返回true;
}
/*(非Javadoc)
*@see android.view.scalegestruedetector.onscalegestruelistener#onScale(android.view.scalegestruedetector)
*/
@凌驾
标度上的公共布尔值(scalegestruedetector arg0){
//TODO自动生成的方法存根
//这里什么都不做(
vf.startAnimation(AnimationUtils.loadAnimation(this,R.anim.zoom_enter));
返回false;
}
/*(非Javadoc)
*@see android.view.scalegestruedetector.onscalegestruelistener#onScaleBegin(android.view.scalegestruedetector)
*/
@凌驾
scaleBegin上的公共布尔值(scalegestruedetector arg0){
//TODO自动生成的方法存根
返回false;
}
/*(非Javadoc)
*@see android.view.scalegestruedetector.onscalegestruelistener#onScaleEnd(android.view.scalegestruedetector)
*/
@凌驾
scalegend上的公共无效(scalegestruedetector arg0){
//TODO自动生成的方法存根
}
}


谢谢大家!!

我相信你的
事件将在其他MotionEvent组件之前触发。由于您每次都返回true,因此它将告诉系统触摸事件已被处理。它不会将其传递给您的其他触摸事件,例如您的
scalegestruedetector
。如果您想在之后处理其他触摸事件,则需要返回false、 我相信你的
事件将在其他MotionEvent组件之前触发。由于您每次都返回true,因此它将告诉系统触摸事件已被处理。它不会将其传递给您的其他触摸事件,例如您的
scalegestruedetector
。如果您想在之后处理其他触摸事件,则需要返回false、

谢谢Jay,但不起作用,如果我将onTouch方法中的返回语句更改为false,我将失去onTouch方法中的功能。而且缩放也不起作用…谢谢Jay,但不起作用,如果我将onTouch方法中的返回语句更改为false,我将失去onTouch方法中的功能。而且e zoom不太管用。。。