我正在尝试实现滑动动画从fragment1转换到fragment2,如this image。
首先,我尝试使用set和translate实现xml,但是我得到了RuntimeException“Unknown animator name translate”。
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator">
<translate
android:fromXDelta="0%p"
android:toXDelta="-100%p"
android:duration="500">
</translate>
</set>
其次,我试图通过使用扩展framelayout的类来解决问题,并添加“getXFraction”和“setXFraction”方法,如this post
public class SlidingFrameLayout extends FrameLayout
{
private static final String TAG = SlidingFrameLayout.class.getName();
public SlidingFrameLayout(Context context) {
super(context);
}
public SlidingFrameLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public float getXFraction()
{
final int width = getWidth();
if(width != 0) return getX() / getWidth();
else return getX();
}
public void setXFraction(float xFraction) {
final int width = getWidth();
setX((width > 0) ? (xFraction * width) : -9999);
}
public float getYFraction()
{
final int height = getHeight();
if(height != 0) return getY() / getHeight(); else return getY();
}
public void setYFraction(float yFraction) {
final int height = getHeight();
setY((height > 0) ? (yFraction * height) : -9999);
}
}
但我仍然不知道我应该如何使用SlidingFrameLayout? 请帮我。 Ť___Ť
答案 0 :(得分:1)
您需要使用objectAnimator而不是translate。以下是一些包含示例的帖子:Animate the transition between fragments和Android Fragments and animation
答案 1 :(得分:1)
您必须使用SlidingFrameLayout作为要在xml布局文件中滑动的片段的根视图,例如,如果您的根视图是相对布局:
<com.company.appname.SlidingFrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
</RelativeLayout>
</com.company.appname.SlidingFrameLayout>
然后使用objectAnimator,例如向右滑动:
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_mediumAnimTime"
android:interpolator="@android:anim/linear_interpolator"
android:propertyName="xFraction"
android:valueFrom="0"
android:valueTo="1.0"/>