我花了几个小时尝试根据手指方向为视图向上滑动、向下滑动设置动画。我能够在自定义视图上触发 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
https ://github.com/daimajia/AndroidViewAnimationsSlideOutUpAnimator
不幸的是,视图的滑出动画仍然无法正常工作。
可以使用 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 轴上的滑出动画?
非常感谢您的任何建议。