我花了几个小时尝试动画视图向上滑动,根据手指方向向下滑动。我可以在自定义视图上触发onFling事件,并使用
获取手指移动的方向 @Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
Logger.d("onFling "+ velocityY);
if(e1.getY() - e2.getY() > SWIPE_MIN_DISTANCE) {
Logger.d("Bottom to top");
slideView(velocityY, e1, e2, Constants.Global.MOVE_BOTTOM_TOP);
return false; // Bottom to top
} else if (e2.getY() - e1.getY() > SWIPE_MIN_DISTANCE) {
Logger.d("Top to bottom");
slideView(velocityY, e1, e2, Constants.Global.MOVE_TOP_BOTTOM);
return false; // Top to bottom
}
return false;
}
我尝试使用FlingAnimation进行动画播放:
FlingAnimation flingAnimation = new FlingAnimation(viewGroup, DynamicAnimation.TRANSLATION_Y); // moves the view on the x-axis
// derive the pixelPerSecond with start velocity value
float pixelPerSecond = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, motionEvent1.getY(), getResources().getDisplayMetrics());
flingAnimation
.setStartVelocity(pixelPerSecond)
.setMinValue(motionEvent1.getRawY())
.setMaxValue(toYDelta)
.setFriction(0.8f)
.start();
或使用以下库中的TranslateAnimation
或SlideOutUpAnimator
:
https://github.com/daimajia/AndroidViewAnimations
不幸的是,视图的滑动动画仍然无法正常工作。
可以使用onScroll事件中的处理将视图定位在Y轴上:
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
Logger.d("onScroll distanceX: "+distanceX+" distanceY: "+distanceY);
params.y = initialY + (int) (e2.getRawY() - initialTouchY);
params.x = 0;
windowManager.updateViewLayout(view, params);
return false;
}
OnScroll 定位效果很好,但我仍有问题要将幻灯片设置为底部或顶部。我认为这是基于根视图的错误处理,也应该定位。
对于视图上有动画效果的人是否可以提供一些示例,如何以正确的方式在Y轴上滑动动画,请?
非常感谢您的任何建议。