pos*_*e14 17 animation android android-animation android-layout android-view
我目前有一个可用的Android程序,它以编程方式将视图添加到LinearLayout.我希望这些观点能够被动画化,并且无法找到任何有关如何做到这一点的好资源.
有人能指出我正确的方向吗?
Fra*_*Pez 16
这是一个非常古老的问题,但仍然很有趣:你可以使用该属性 android:animateLayoutChanges="true"
例如:
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:animateLayoutChanges="true"
/>
Run Code Online (Sandbox Code Playgroud)
这可以通过Scenes和Transitions API完成.
框架为我们提供了3 Transition种开箱即用:Fade,Slide和Explode,但你也可以创建过渡延长您的自定义类型Visibility的类和压倒一切适当的方法.
所以,有了ViewGroup,我们可以这样做:
viewGroup.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
Transition t = null;
if (i == 1) {
t = new Fade();
} else if (i == 2) {
t = new Slide(Gravity.BOTTOM);
} else if (i == 3) {
t = TransitionInflater.from(v.getContext())
.inflateTransition(R.transition.my_transition);
}
Button button = new Button(v.getContext());
button.setText("My button " + i++);
TransitionManager.beginDelayedTransition(customLayout, t);
viewGroup.addView(button);
}
});
Run Code Online (Sandbox Code Playgroud)
其中my_transition.xml是以下几点:
<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:interpolator="@android:interpolator/fast_out_slow_in">
<fade/>
<slide android:slideEdge="bottom"/>
</transitionSet>
Run Code Online (Sandbox Code Playgroud)
我们会得到这个结果:
注意,我们必须TransitionManager.beginDelayedTransition()在对布局进行任何更改之前执行(即在addView()调用之前).然后框架将处理其余的事情.
还有另一个重载TransitionManager.beginDelayedTransition(ViewGroup),您不需要指定要应用的精确转换,系统将执行AutoTransition动画,这基本上会淡化和更改动画视图的边界.
更新评论中的对话总结
框架TransitionManager可以从API 19获得,并且完全支持API 21(完全说我的意思是例如Slide转换可以从API 21获得).虽然有可用的支持包,但它并没有向后端口提供所有功能.或者,您可以移动到TransitionsEverywhere库,该库将所有内容向后移植到Android 4.0.
尝试
1.将视图添加到线性布局
linearLayout.addView(customView);
Run Code Online (Sandbox Code Playgroud)
2.添加slide_up.xml到res/anim文件夹
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">
<translate
android:duration="500"
android:fromYDelta="100%"
android:toYDelta="0%" />
</set>
Run Code Online (Sandbox Code Playgroud)
3.添加视图后立即应用动画
Animation animation = AnimationUtils.loadAnimation(context, R.anim.slide_up);
customView.startAnimation(animation);
Run Code Online (Sandbox Code Playgroud)
如果要为视图一个动画,请使用以下几行
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
linearLayout.addView(customView);
Animation animation = AnimationUtils.loadAnimation(context, R.anim.slide_up);
customView.startAnimation(animation);
}
}, 500);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9930 次 |
| 最近记录: |