1

これは重複ではないと言いたいだけです。この質問はスタックオーバーフローで対処されていません

ユーザーがナビゲートするアプリケーションに複数のフラグメントがあります。コードにサポート ライブラリがありましたが、それを使用していたときは <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()れることはないので、ここからどこに行くべきかわかりません...すべての入力に感謝します

**編集 ==== フラグメント レイアウト ===== **

<?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>
4

1 に答える 1

-1

問題は、フラグメントをアニメーション化しようとしていることです。活動ではありません。したがって、アニメーションを設定するフラグメントに CustomFrameLayout を追加する必要があります。トランザクションが発生すると、トランザクションはアクティビティではなくフラグメントの親の値をアニメーション化します。それがあなたが得ている理由ですMethod setXFraction() with type float not found on target class class android.widget.RelativeLayout。フラグメントの親は RelativeLayout であり、setXFraction メソッドがないためです。

それでも、他の人を助けるかもしれないので、残りのアンサーベローを残します。

in_from_left.xml

<objectAnimator
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="500"
    android:propertyName="x"
    android:valueFrom="1000"
    android:valueTo="0"
    android:valueType="floatType" />

in_from_right.xml

<?xml version="1.0" encoding="utf-8"?>

<objectAnimator
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="500"
    android:propertyName="x"
    android:valueFrom="0"
    android:valueTo="1000"
    android:valueType="floatType" />

そして、私のトランザクションは次のようになります。

FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.in_from_left, R.anim.in_from_right, R.anim.in_from_left, R.anim.in_from_right);
transaction.add(R.id.container,myFragment,"tag");
transaction.commit();
于 2014-10-10T15:32:56.707 に答える