Android - Создание переводов и objectAnimator в одном файле XML

Я пытался создать эффект вращения 3D-куба при переходе от одного фрагмента к другому. Сначала я использовал эффект перевода (на XML), вызывая сFragmentTransaction.setCustomAnimations(...) и затем, открывая / закрывая фрагмент, я играл с камерой, чтобы сделать вращение.

Это работало FINE, но, похоже, я СЛИШКОМ (не спрашивайте меня, почему) использую всю эту анимацию, используя только XML-файл. После долгого поиска я обнаружил, что должен использовать objectAnimator, чтобы сделать вращение.

Следовал примеру Google, и мне удалось сделать анимацию сальто. Теперь мне нужно перевести фрагменты, делая их скользящими и выдвигающимися. Кажется, что я не могу использовать objectAnimator и перевести эффект на тот же файл XML. Так как эта ошибка появляется:

java.lang.RuntimeException: Unknown animator name: translate at (...)

Любые идеи о том, как я могу сделать эффект скольжения и одновременно использовать objectAnimator?

Спасибо за уделенное время!

Код, который я использовал:

card_flip_right_in.xml

<set xmlns:android="http://schemas.android.com/apk/res/android" >
    <!-- Before rotating, immediately set the alpha to 0. -->
    <objectAnimator
        android:duration="0"
        android:propertyName="alpha"
        android:valueFrom="1.0"
        android:valueTo="0.0" />

    <!-- Rotate. -->
    <objectAnimator
        android:duration="@integer/card_flip_time_full"
        android:interpolator="@android:interpolator/accelerate_decelerate"
        android:propertyName="rotationY"
        android:valueFrom="180"
        android:valueTo="0" />

    <!-- Half-way through the rotation (see startOffset), set the alpha to 1. -->
    <objectAnimator
        android:duration="1"
        android:propertyName="alpha"
        android:startOffset="@integer/card_flip_time_half"
        android:valueFrom="0.0"
        android:valueTo="1.0" />

</set>

Фрагмент, вызывающий другой фрагмент: (вращение куба должно быть видно между этими 2)

private void launchArticle(int prev, int pos){
        ArticleFragment newFragment = new ArticleFragment();
        Bundle args = new Bundle();
        args.putString("pos", pos);
        args.putInt("prev", prev);
        newFragment.setArguments(args);
        android.app.FragmentTransaction transaction = getFragmentManager().beginTransaction();
        Fragment currFrag = (Fragment)getFragmentManager().findFragmentById(R.id.headlines_fragment);
        if (currFrag != null) {
                transaction.hide(currFrag);
        }
        transaction.setCustomAnimations(
                R.animator.card_flip_right_in,
                R.animator.card_flip_right_out,
                R.animator.card_flip_left_in,
                R.animator.card_flip_left_,out
                );

        transaction.replace(R.id.fragment_container, newFragment, pos);
        transaction.addToBackStack(null);

        transaction.commit();
}

ОБНОВИТЬ:

Мне удалось решить предыдущую проблему, используя класс, который расширяет мою структуру фрагментов, которые я использую

SlidingFrameLayout.java

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);  
    }
}

и добавив это в objectAnimator:

<!-- Move -->
    <objectAnimator
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="@integer/card_flip_time_full"
        android:interpolator="@android:anim/linear_interpolator"
        android:propertyName="xFraction"
        android:valueFrom="-1"
        android:valueTo="0" />

Это работает лучше, но оси вращения находятся в середине FrameLayout, и это не создает иллюзию куба ... Возможно ли установить оси вращения в определенной точке?

Ответы на вопрос(2)

Ваш ответ на вопрос