Android 放大视口翻转器
我试着像这样做pinchzoom: 我试着使代码适应我的项目,但它不起作用 我的代码在这里(我做错了什么?) 另外,我有onTouch事件中“showNext”和“showPrev”的代码,可能不兼容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
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不太管用。。。