假设我有A,B,C和D的观点。
我需要为View A
设置动画,使其高度从零到CONSTANT_HEIGHT
(我有)以及从零到1的alpha值。
在View A
动画之后,我需要立即将View B
的alpha设置为0到1,View C
的alpha从0到1的动画,并调用名为{{的方法1}} setChecked
(自定义复选框)。如果参数View D
为setChecked(checked: Boolean, animate: Boolean)
,则animate
方法已经有动画。
因此,第一个动画将是:true
- > View A
到alpha
以及1.0f
到height
。
在第一个动画结束后,第二个动画将立即开始,它将是:CONSTANT_HEIGHT
和View B
View C
到alpha
和1.0f
调用{{ 1}},一起玩/同时玩(并行)。
我怎样才能做到这一点?
我已经尝试了View D
,setChecked(checked: true, animate:true)
等,但我在所有尝试中都失败了。有人可以指导我如何解决这个问题吗?
修改:
尝试过渡:
Transition
例如,我在这里使用AnimatorSet
作为过渡,但我也改变了视图的高度( val tras1 = TransitionManager.beginDelayedTransition(statusLayout, Fade(Fade.IN))
firstLine.layoutParams.height = 200
firstLine.alpha = 1.0f
firstCheckBox.setChecked(true, true)
),对吗?那么,如何在此之后安排另一次转换?在最后一次转换之后,我是否需要关闭它(或做任何事情)?
EDIT2 :
我正在尝试以下但是动画播放不顺畅(实际上它们正在突然改变,好像根本没有动画。效果与调用Fade(Fade.IN)
相同。
firstLine
答案 0 :(得分:0)
我遇到了类似的问题,并在网上找到了这种方法:
布局XML文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1"
android:layout_gravity="center"/>
<TextView
android:id="@+id/text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2"
android:layout_gravity="center"/>
<TextView
android:id="@+id/text3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="3"
android:layout_gravity="center"
android:textSize="48sp"/>
<TextView
android:id="@+id/text4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="4"
android:layout_gravity="center"/>
<TextView
android:id="@+id/text5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="5"
android:layout_gravity="center"/>
<TextView
android:id="@+id/text6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="6"
android:layout_gravity="center"/>
</LinearLayout>
Java文件:
@Override
protected void onCreate(Bundle savedInstanceState) {
//your existing code here
int[] textViewIDs = {R.id.text1, R.id.text2, R.id.text3,R.id.text4,R.id.text5,R.id.text6};
int delayBetweenAnim = 300;
for (int i = 0; i < textViewIDs.length; i++) {
Animation fadeAnimation = AnimationUtils.loadAnimation(this, R.anim.fade);
fadeAnimation.setStartOffset(i * delayBetweenAnim);
TextView textView = (TextView) findViewById(textViewIds[i]);
textView.startAnimation(fadeAnimation);
}
}
fade.xml文件
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="500" />
注意:尽管这可以完成工作,但是我不确定这段代码的效率。我只为自己创建爱好应用程序,这似乎足以满足我的需求。但是,我建议您研究更有效的代码。专家可能会在下面对此代码的缺点进行评论。