【问题标题】:Overlapping TransitionManager animations in android在android中重叠TransitionManager动画
【发布时间】:2020-05-31 11:51:15
【问题描述】:

我正在尝试在 TransitionManager 动画的帮助下展开和折叠我的视图。以下是输出,

在折叠顶视图时查看重叠布局。如何避免这种情况?我设置了“detailedView”(带有图标)可见性GONE 并使用以下代码进行动画,

topView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TransitionManager.beginDelayedTransition(topView);
                TransitionManager.beginDelayedTransition(bottomView);
                if (detailsView.getVisibility() == View.VISIBLE) {
                    detailsView.setVisibility(View.GONE);
                    cardText.setText("Collapse Title");
                } else {
                   detailsView.setVisibility(View.VISIBLE);
                   cardText.setText("Expanded Title");

                }
            }
        });

【问题讨论】:

    标签: android android-animation android-transitions


    【解决方案1】:

    我会以不同的方式制作动画。我会用带有 wrap_content 的顶部单元格制作一个 LinearLayout,然后单击时我会执行以下操作:

     valueAnimator = ValueAnimator.ofInt(titleContainer.getHeight(),titleContainer.getHeight() + newHeight );
        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                titleContainer.setHeight(animation.getAnimatedValue());
            }
        });
        valueAnimator.setDuration(270);
        valueAnimator.start();
    

    【讨论】:

    • 很高兴你喜欢它。
    【解决方案2】:

    我遇到了同样的问题。

    TransitionManager.beginDelayedTransition() 函数采用的第一个参数必须是所有将在转换中交互的视图的父级,例如:

    我有下一个布局:

    <!-- The scene root  -->
    <LinearLayout
        android:id="@+id/transition_container" >
    
    
        <!-- First card  -->
        <androidx.cardview.widget.CardView
            android:id="@+id/expandableCard1">
    
            <LinearLayout
               android:id="@+id/staticHeader1">
            </LinearLayout>
    
            <LinearLayout
               android:id="@+id/expandableContent1">
            </LinearLayout>
    
        </androidx.cardview.widget.CardView>
    
    
        <!-- Second card  -->
        <androidx.cardview.widget.CardView
            android:id="@+id/expandableCard2">
    
            <LinearLayout
               android:id="@+id/staticHeader2">
            </LinearLayout>
    
            <LinearLayout
               android:id="@+id/expandableContent2">
            </LinearLayout>
    
        </androidx.cardview.widget.CardView>
    
    
    </LinearLayout>
    

    还有我的代码(kotlin):

    // toggle
    if( expandableContent1.visibility == View.GONE ){
    
          // apply to the root scene
          TransitionManager.beginDelayedTransition(transition_container )
    
          // change the visibility of the expandable content
          expandableContent1.visibility = View.VISIBLE
          arrowBtn.setImageResource( R.drawable.ic_arrow_up_24)
    
    } else {
    
          // apply to the root scene
          TransitionManager.beginDelayedTransition(transition_container )
    
          // change the visibility of the expandable content
          expandableContent1.visibility = View.GONE
          arrowBtn.setImageResource( R.drawable.ic_arrow_down_24)
    }
    

    【讨论】:

      猜你喜欢
      • 2020-08-10
      • 2023-04-01
      • 1970-01-01
      • 2021-05-31
      • 2018-03-12
      • 1970-01-01
      • 1970-01-01
      • 2018-01-24
      • 1970-01-01
      相关资源
      最近更新 更多