我创建了5个活动,每个活动都有一个仅包含图像的ListView。我使用了一个简单的滑动动画来改变活动。
以下是相关代码:
@Override
public boolean onTouchEvent(MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) {
return true;
}
return super.onTouchEvent(event);
}
private void onLeftSwipe() {
Intent intent = new Intent(HimachalActivity.this, IndianWildlifeActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.slide_left_in, R.anim.slide_left_out);
}
private void onRightSwipe() {
Intent intent = new Intent(HimachalActivity.this, BaseActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.slide_right_in, R.anim.slide_right_out);
}
private class SwipeGestureDetector extends GestureDetector.SimpleOnGestureListener {
// Swipe properties, you can change it to make the swipe
// longer or shorter and speed
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 200;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2,
float velocityX, float velocityY) {
try {
float diffAbs = Math.abs(e1.getY() - e2.getY());
float diff = e1.getX() - e2.getX();
if (diffAbs > SWIPE_MAX_OFF_PATH)
return false;
// Left swipe
if (diff > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
HimachalActivity.this.onLeftSwipe();
// Right swipe
} else if (-diff > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
HimachalActivity.this.onRightSwipe();
}
} catch (Exception e) {
Log.e("BaseActivity", "Error on gestures");
}
return false;
}
}
问题是,只有在完全滑动并且动画感觉不顺畅之后,下一个活动或上一个活动才会打开。
我想要一个动画,当我开始滑动时,下一个活动或上一个活动开始显示自己。是否有可以应用的内置动画。如果没有,请指出我自己创建一个相关资源,可能是一个不需要我修改现有代码的资源。谢谢。
答案 0 :(得分:2)
据我所知,这个功能在Lollipop材料设计模块中很容易获得。
答案 1 :(得分:1)
我估计,如果你遵循@Whitney的建议会更容易。将您的片段放入视图寻呼机中,如下所述:http://developer.android.com/training/animation/screen-slide.html
它不适用于您当前的实现的原因是,只有在您 flinged 之后,设备才会理解手势。此后,动画发生。实时未检测到Fling。如果您想实现实时投掷,可能必须覆盖触摸事件,如下所述:http://developer.android.com/training/custom-views/making-interactive.html