1

我花了几个小时尝试根据手指方向为视图向上滑动、向下滑动设置动画。我能够在自定义视图上触发 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();

或使用以下库中的或: TranslateAnimationhttps ://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 轴上的滑出动画?

非常感谢您的任何建议。

4

0 回答 0