Я просто хочу сказать, что это не является дубликатом, этот вопрос не был рассмотрен на переполнение стекаФрагмент Переход анимации с использованием Аниматор Объект не работает
У меня есть несколько фрагментов в приложение, которое позволяет пользователю перейти через. У меня была библиотека поддержки в моем коде, но с тех пор я удалил ее, когда я использовал ее, я анимировал фрагменты с помощью <translate>
. Я теперь изменил это, чтобы это отлично работало, если я жестко кодировал значения в и из. Поскольку мое приложение будет использоваться на разных плотностях экрана, я не могу этого сделать. Таким образом, после исследования и учебники я создали свой обычай FrameLayout следующим образом:
public class CustomFrameLayout extends FrameLayout{
public CustomFrameLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public float getXFraction() {
return getX()/getWidth(); // TODO: guard divide-by-zero
}
public void setXFraction(float xFraction) {
// TODO: cache width
final int width = getWidth();
setX((width > 0) ? (xFraction * width) : -9999);
}
}
моя анимация XML является:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator"
android:valueFrom="1.0"
android:valueTo="0"
android:propertyName="xFraction"
android:duration="@android:integer/config_mediumAnimTime" />
</set>
и моя основная раскладка деятельности:
<com.axn.test.app.custom.CustomFrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:gravity="top"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Я тогда есть код для настройки пользовательских анимаций:
FragmentTransaction ft = getActivity().getFragmentManager().beginTransaction();
ft.setCustomAnimations(R.animator.fragment_slide_in_right, R.animator.fragment_slide_in_right, R.animator.fragment_slide_in_right, R.animator.fragment_slide_out_right);
Проблема заключается в том, когда я меняю фрагменты нет анимации и я получаю следующее в консоли:
W/PropertyValuesHolder﹕ Method setXFraction() with type float not found on target class class android.widget.RelativeLayout
Так что, если кто-то пришел через это в прошлом, или знает, как решить эту проблему, я был бы признателен Это. в моем customFrameLayout setXFraction(float xFraction)
и getXFraction()
никогда не называются, так что я не знаю, куда идти отсюда ... все входные высоко оценили
** EDIT ==== ФРАГМЕНТ РАСПОЛ ===== **
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background"
>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RelativeLayout
android:layout_marginTop="20dp"
android:layout_marginLeft="20dp"
android:id="@+id/show1"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true">
<ImageView
android:id="@+id/poster1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/poster1"/>
<RelativeLayout
android:id="@+id/poster1Details"
android:background="@drawable/reflection1"
android:layout_below="@+id/poster1"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/poster1text"
android:layout_centerHorizontal="true"
android:textColor="@color/white"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/poster1Title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/poster1text"
android:layout_centerHorizontal="true"
android:textColor="@color/white"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="@string/episode1"/>
</RelativeLayout>
</RelativeLayout>
<RelativeLayout
android:id="@+id/show2"
android:layout_weight="1"
android:layout_marginRight="10dp"
android:layout_marginTop="20dp"
android:layout_marginLeft="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true">
<ImageView
android:id="@+id/poster2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/poster2"/>
<RelativeLayout
android:id="@+id/poster2Details"
android:background="@drawable/reflection2"
android:layout_below="@+id/poster2"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/poster2text"
android:layout_centerHorizontal="true"
android:textColor="@color/white"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/poster2Title"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/poster2text"
android:layout_centerHorizontal="true"
android:textColor="@color/white"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="@string/episode1"/>
</RelativeLayout>
</RelativeLayout>
</LinearLayout>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true">
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/logos_backgrounds"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/presents"
android:textColor="@color/white"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp"
/>
</RelativeLayout>
</RelativeLayout>
Что такое макет вашего фрагмента? –
Я включу это в редактирование ... У меня есть несколько фрагментов с разными макетами –
Там вы идете. Вы пытаетесь анонимать фрагмент. Не деятельность. Поэтому вам нужно добавить 'CustomFrameLayout' на фрагмент, для которого вы настраиваете анимацию. –