我正在使用 html、css 和 javascript 开发一个 Android 应用程序。我的应用程序依赖于 Phonegap 框架。该应用程序由相当数量的本地页面组成。在应用程序中,我试图在 Android 手机上处理滑动手势事件并根据滑动方向移动页面。即,如果用户向左滑动,应用程序必须调用上一页,然后如果用户向右滑动,则应用程序将用户转到下一页。
我可以使用原生java for android来做到这一点。但问题是,在调用页面期间,我正在为请求的页面制作幻灯片效果。但发生的是当前页面采用幻灯片效果而不是请求页面,即在幻灯片效果完成后,出现请求页面:(我正在寻找一种使效果影响请求的本地页面而不是当前页面的机制。我尝试延迟动画持续时间,但它变得太慢了,所以它变得无聊,顺便说一句未能实现。
我希望你能帮助我解决这个问题,或者向我建议任何方法或机制来达到这个效果。
这是我的代码:
public class App extends DroidGap {
/** Called when the activity is first created. */
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
private GestureDetector gestureDetector;
View.OnTouchListener gestureListener;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
gestureDetector = new GestureDetector(new MyGestureDetector());
gestureListener = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) {
return true;
}
return false;
}
};
super.loadUrl("file:///android_asset/www/index.html");
}
class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
try {
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
return false;
// right to left swipe
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
appView.startAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide_left));
appView.goBack();
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
appView.startAnimation(AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide_right_in));
appView.goForward();
}
} catch (Exception e) {
// nothing
}
return false;
}
}
@Override
public boolean dispatchTouchEvent(MotionEvent e){
super.dispatchTouchEvent(e);
return gestureDetector.onTouchEvent(e);
}
}