【问题标题】:Android fragment transition custom viewAndroid片段过渡自定义视图
【发布时间】:2015-07-13 18:23:33
【问题描述】:

我想为片段过渡创建自定义动画。动画是一个圆的形式,将他的半径从一个特定的大小增加到等于窗口的高度。我可以使用 ScaleAnimation,但是我会失去可绘制的质量。有人有什么想法吗?提前致谢。

【问题讨论】:

    标签: android android-fragments android-animation android-custom-view


    【解决方案1】:

    好的。我会回答我自己的问题:)。为了使用我的自定义过渡(增加他的大小的彩色圆圈)为片段过渡设置动画,我做了以下操作: - 创建一个绘制圆的自定义视图并添加增加其半径的可能性; - 将此视图放在我的 FragmentActivity xml 布局中; - 当目标按钮被点击并且片段应该改变时,我调用了 ValueAnimator 来改变圆的半径;

    最终代码将如下所示:

    public class MainScreenActivity extends AppCompatActivity {
    
        private Button targetButton;
        private CircleView circleView;
    
    
    
        public void targetButtonClick(View view) {
            AnimationHandler handler = new AnimationHandler(view.getX(),view.getY());
            handler.animate();
        }
    
        private class AnimationHandler implements Animator.AnimatorListener, ValueAnimator.AnimatorUpdateListener {
            private static final int TRANSITION_ANIM_DURATION = 500;
            private final float centerX;
            private final float centerY;
            private ValueAnimator valueAnimator;
    
            public AnimationHandler(float x, float y) {
                this.centerX = x;
                this.centerY = y;
                init();
            }
    
            private void init() {
                Point point = new Point();
                getWindowManager().getDefaultDisplay().getSize(point);
                valueAnimator = ValueAnimator.ofFloat(0, point.y);
                valueAnimator.setDuration(TRANSITION_ANIM_DURATION);
                valueAnimator.addUpdateListener(this);
                valueAnimator.addListener(this);
            }
    
            @Override
            public void onAnimationStart(Animator animation) {
    
            }
    
            @Override
            public void onAnimationEnd(Animator animation) {
            }
    
            @Override
            public void onAnimationCancel(Animator animation) {
    
            }
    
            @Override
            public void onAnimationRepeat(Animator animation) {
    
            }
    
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                circleView.setRadius((float) animation.getAnimatedValue());
            }
    
            public void animate() {
                circleView.setXCenter(centerX);
                circleView.setYCenter(centerY);
                int color = getResources().getColor(android.R.color.dark_red);
                circleView.setStrokeWidth(getResources().getDimensionPixelSize(R.dimen.trans_circle_width));
                valueAnimator.start();
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-13
      • 2012-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-02
      • 1970-01-01
      相关资源
      最近更新 更多