Я пытаюсь добавить пользовательский переход к фрагментам. Как предлагалось Link, правильным решением является создание пользовательского представления в виде контейнера фрагментов, а затем путем анимирования нового добавленного свойства, выполнения перехода фрагмента. но абсолютно его на java. Я реализовал, что, как показано ниже в C# и Xamarin:Как создать пользовательские представления со свойствами для анимации в Xamarin
class SmartFrameLayout : FrameLayout
{
public SmartFrameLayout(Context context) : base(context) { }
public SmartFrameLayout(Context context, IAttributeSet attrs) : base(context, attrs) { }
public SmartFrameLayout(Context context, IAttributeSet attrs, int defStyleAttr) : base(context, attrs, defStyleAttr) { }
public SmartFrameLayout(Context context, IAttributeSet attrs, int defStyleAttr, int defStyleRes) : base(context, attrs, defStyleAttr, defStyleRes) { }
//public float getXFraction()
//{
// if (Width == 0) return 0;
// return GetX()/Width;
//}
//public void setXFraction(float fraction)
//{
// Log.Debug("Fraction", fraction.ToString());
// float xx = GetX();
// SetX(xx * fraction);
//}
//private float XFraction;
public float XFraction
{
get {
if (Width == 0) return 0;
return GetX()/Width;
}
set {
float xx = GetX();
SetX(xx * value);
}
}
}
Как вы можете видеть, сначала я пытался осуществить это так же, как в учебнике (За исключением, что C# не поддерживает только для чтения локальной переменной как «окончательный» замена!) , но в объектеAnimator свойство не вызывалось должным образом. Тогда я думаю, что, возможно, использование свойства C# решит проблему. Но это не так.
Вот моя анимация XML-файл, названный «from_right.xml»:
<?xml version="1.0" encoding="utf-8" ?>
<objectAnimator
xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:propertyName="xFraction"
android:valueType="floatType"
android:valueFrom="1.0"
android:valueTo="0"
android:duration="500"/>
Я изменил ИмениСвойства на «XFraction» или даже что-нибудь еще, но результаты были одинаковыми.
Использование «x» как propertyName и «1000» как valueFrom работает хорошо.
Итак, я выяснил, что основная проблема заключается в том, что objectAnimator не мог вызвать setXFraction вообще!
Пожалуйста, скажите мне, что я делаю неправильно, или если есть лучшее решение, чтобы получить ровно ширину экрана для valueFrom в objectAnimator!
Это был отличный момент. Tnx –