【问题标题】:How to translate windowmanager floating layout diagonally with animation? (ChatHead click animation)如何用动画对角翻译windowmanager浮动布局? (ChatHead 点击动画)
【发布时间】:2016-07-22 16:57:01
【问题描述】:

我正在尝试在我的应用程序中实现聊天头。我已经设法让一切正常工作,onClick 自定义布局打开,这是一个带有 web 视图和一些按钮的相对布局。当它同时点击打开定义的布局时,聊天头会移动到右上角。 现在我面临的唯一问题是聊天头翻译,当将它移动到右上角时,它不会顺利过渡,因为我没有给它任何动画,我不知道怎么做。 我搜索了一个 mwthod 并找到了我尝试使用的 ValueAnimator。

        private ValueAnimator mMoveEdgeAnimator;


        mParams.y = goalPositionY;

        mMoveEdgeAnimator = ValueAnimator.ofInt(currentX, goalPositionX);
        mMoveEdgeAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                mParams.x = (Integer) animation.getAnimatedValue();
                mWindowManager.updateViewLayout(FloatingView.this, mParams);
            }
        });

        mMoveEdgeAnimator.setDuration(MOVE_TO_EDGE_DURATION);
        mMoveEdgeAnimator.setInterpolator(mMoveEdgeInterpolator);
        mMoveEdgeAnimator.start();

但它仅适用于 X 或 Y 轴之一,在屏幕上看起来并不无缝,我希望它的对角转换类似于 facebook 聊天头对 onClick 的反应。

如何对角翻译?另外如何在 windowManager.addView() 上应用增长动画?

提前致谢!!

【问题讨论】:

    标签: android animation android-animation android-windowmanager android-transitions


    【解决方案1】:

    您可以使用属性值持有者在 x 和 y 上设置动画。

    public void animate(final View v, int startX, int endX, int startY, int endY) {
    
        PropertyValuesHolder pvhX = PropertyValuesHolder.ofInt("x", startX, endX);
        PropertyValuesHolder pvhY = PropertyValuesHolder.ofInt("y", startY, endY);
    
        ValueAnimator translator = ValueAnimator.ofPropertyValuesHolder(pvhX, pvhY);
    
        translator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
                WindowManager.LayoutParams layoutParams = (WindowManager.LayoutParams) v.getLayoutParams();
                layoutParams.x = (Integer) valueAnimator.getAnimatedValue("x");
                layoutParams.y = (Integer) valueAnimator.getAnimatedValue("y");
                windowManager.updateViewLayout(v, layoutParams);
            }
        });
    
        translator.setDuration(100);
        translator.start();
    }
    

    【讨论】:

      猜你喜欢
      • 2016-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多