【问题标题】:Creating a slower transition. TransitionManager.beginDelayedTransition(); is too fast创建一个较慢的过渡。 TransitionManager.beginDelayedTransition();太快了
【发布时间】:2015-04-22 00:13:52
【问题描述】:

我正在创建一个过渡。当单击按钮时,将执行以下方法。该方法更改了图像视图的大小、位置,并将其淡出。我正在使用TransitionManager.beginDelayedTransition(); is too fast. 来减慢过渡速度.. 但它仍然太快了。我能做些什么来减缓过渡。谢谢。

private void moveIcon() {
    View moveableIcon = findViewById(R.id.moveableImageView);

    TransitionManager.beginDelayedTransition(myLayout);

    // change the position of the icon

    RelativeLayout.LayoutParams positionRule = new RelativeLayout.LayoutParams(
            RelativeLayout.LayoutParams.WRAP_CONTENT ,

            RelativeLayout.LayoutParams.WRAP_CONTENT);
    positionRule.addRule(RelativeLayout.ALIGN_PARENT_TOP , RelativeLayout.TRUE);

    positionRule.addRule(RelativeLayout.ALIGN_PARENT_LEFT , RelativeLayout.TRUE);

    moveableIcon.setLayoutParams(positionRule);

    // change the size of the button

    ViewGroup.LayoutParams sizeRules = moveableIcon.getLayoutParams();
    sizeRules.width = 50;
    sizeRules.height = 50;
    moveableIcon.setLayoutParams(sizeRules);

    fadeOutAndHideImage(image);
}

private void fadeOutAndHideImage(final ImageView img)
{
    Animation fadeOut = new AlphaAnimation(1, 0);
    fadeOut.setInterpolator(new AccelerateInterpolator());
    fadeOut.setDuration(1000);

    fadeOut.setAnimationListener(new Animation.AnimationListener()
    {
        public void onAnimationEnd(Animation animation)
        {
            img.setVisibility(View.GONE);
        }
        public void onAnimationRepeat(Animation animation) {}
        public void onAnimationStart(Animation animation) {}
    });

    img.startAnimation(fadeOut);
}

【问题讨论】:

  • 我认为这是因为您的fadeOutAndHideImage() 函数中的fadeOut.setDuration(1000);。如果您将持续时间设置得更高,则完成转换需要更多时间,因此会更慢。

标签: java android animation transitions


【解决方案1】:

试试这个方法:beginDelayedTransition(android.view.ViewGroup, android.transition.Transition)

AutoTransition autoTransition = new AutoTransition();
autoTransition.setDuration(3000);

TransitionManager.beginDelayedTransition(myLayout, autoTransition);

【讨论】:

    【解决方案2】:

    不要使用TransitionManager.beginDelayedTransition(myLayout);,而是使用TransitionManager.go()

    TransitionManager.beginDelayedTransition(myLayout); 最可能使用的转换是ChangeBounds。 您可以轻松设置此 ChangeBounds 过渡的持续时间,然后告诉 TransitionManager 运行它:

    private void moveIcon() {
        View moveableIcon = findViewById(R.id.moveableImageView);
    
        // change the position of the icon 
    
        RelativeLayout.LayoutParams positionRule = new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT ,
    
                RelativeLayout.LayoutParams.WRAP_CONTENT);
        positionRule.addRule(RelativeLayout.ALIGN_PARENT_TOP , RelativeLayout.TRUE);
    
        positionRule.addRule(RelativeLayout.ALIGN_PARENT_LEFT , RelativeLayout.TRUE);
    
        moveableIcon.setLayoutParams(positionRule);
    
        // change the size of the button 
    
        ViewGroup.LayoutParams sizeRules = moveableIcon.getLayoutParams();
        sizeRules.width = 50;
        sizeRules.height = 50;
        moveableIcon.setLayoutParams(sizeRules);
    
        ChangeBounds myTransition = new ChangeBounds();
        myTransition.setDuration(1000L);
        TransitionManager.go(new Scene(myLayout), myTransition);
    
        fadeOutAndHideImage(image);
    }
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2015-04-07
      • 1970-01-01
      • 1970-01-01
      • 2011-05-04
      • 1970-01-01
      • 2021-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多