gpt4 book ai didi

android - 放大 ViewFlipper

转载 作者:行者123 更新时间:2023-11-30 03:37:59 30 4
gpt4 key购买 nike

我正在尝试像这样进行缩放:zoom the imageview on the double click in viewflipper in android

我尝试将该代码改编为我的项目,但它不起作用...

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

此外,我在 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

}

感谢大家!!

最佳答案

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

关于android - 放大 ViewFlipper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16317560/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com