adh*_*eus 78 android android-animation android-fragments
我正在使用支持包v4的Google API 8(Android 2.2).
它不会给出任何错误或动画.
交易:
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.content, myFragment);
transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
transaction.commit();
Run Code Online (Sandbox Code Playgroud)
动画:
slide_in_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="700"
android:fromXDelta="-100%"
android:toXDelta="0%" >
</translate>
</set>
Run Code Online (Sandbox Code Playgroud)
slide_out_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="700"
android:fromXDelta="0%"
android:toXDelta="100%" >
</translate>
</set>
Run Code Online (Sandbox Code Playgroud)
有谁知道这里发生了什么?
adh*_*eus 248
在设置动画之前,管理器正在堆叠我的事务,因此它在没有动画的情况下堆叠事务(悲伤但是真实),即使我在事务之后提交了事务,也会发生这种情况setCustomAnimations().
解决方案是首先设置动画:
FragmentTransaction transaction = manager.beginTransaction();
transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
transaction.replace(R.id.content, myFragment);
transaction.commit();
Run Code Online (Sandbox Code Playgroud)
Har*_*wak 19
如上所述,单独的陈述肯定会奏效.但这里的诀窍是setCustomAnimation在设置事务类型之前.add,replace等等,否则它没有.因此,应用相同的逻辑,method chaining也有效.例如.
getSupportFragmentManager()
.beginTransaction()
.setCustomAnimations(R.anim.a_slide_up,
R.anim.a_slide_down,
R.anim.a_slide_up,
R.anim.a_slide_down)
.add(R.id.root_layout,
MyFrag.newInstance())
.addToBackStack("MyFrag")
.commit();
Run Code Online (Sandbox Code Playgroud)
把它放在这里,以便更喜欢的人method chaining发现它有用.干杯!
小智 5
将此保留为最受欢迎的问题。我对片段交易没有设置动画有同样的问题。罪魁祸首是在包含布局中将属性android:animateLayoutChanges设置为true。
我希望它可以帮助某人节省一些时间来寻找解决方案,因为在不同文件中嵌套布局时可能很难注意到。
| 归档时间: |
|
| 查看次数: |
51813 次 |
| 最近记录: |