0

カードの背景画像を含む大きなトグル ボタンと、カードのランクとスーツを表すテキストビューを含むレイアウト オブジェクトとしてカードが表されるカード ゲームがあります。

<RelativeLayout
            android:id="@+id/card1">
        <ToggleButton
                android:id="@+id/cardback1" android:background="@drawable/blank_card"  android:checked="false" android:textOff='' android:textOn="HELD" android:textColor="@android:color/holo_red_dark" android:clickable="true" android:enabled="false"/>
        <TextView
                android:id="@+id/rank1"
                android:textColor="@android:color/holo_red_light"
                android:textIsSelectable="false" 
                android:textSize="16dp"
                android:layout_alignParentTop="true" android:layout_marginTop="5dp"
                android:layout_marginLeft="7dp" android:textAlignment="center"/>
        <TextView
                android:id="@+id/suit1" android:text="@string/suit_diamond"
                android:textColor="@android:color/holo_red_light"
                android:textIsSelectable="false" android:typeface="normal"
                android:textSize="24dp"
                android:layout_centerInParent="true"/>
</RelativeLayout>

カードをリディールするとき、カスタム アニメーションを適用して、一連のオブジェクト アニメーターで行っている「フリップ」としてカードを表示したいと思いました。使用するアニメーターは次のように定義されています。

 <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
       android:valueFrom="0" android:valueTo="360" android:propertyName="rotationY" > </objectAnimator>

そして、レイアウト xml で参照されている RelativeLayout をアニメーション化しています。

  RelativeLayout cardLayout = (RelativeLayout)findViewById(R.id.card1);
 Animator initialAnimator = (ObjectAnimator) AnimatorInflater.loadAnimator(cardLayout.getContext(), R.anim.flip360);
    initialAnimator.setTarget(cardLayout);
    initialAnimator.setDuration(1000);
    initialAnimator.start();

ただし、アニメーション中、レイアウト上のテキストはまったく表示されません。ボタン イメージは期待どおりに回転しますが、アニメーションが完了するまでテキストは表示されません。

以前は、cardLayout でもっと単純なアニメーションを使用していました。単純に Y 軸でスケーリングして回転をエミュレートしていましたが、見栄えがよくありませんでした。ただし、その方法を使用すると、アニメーション中にテキストがカードに表示されたままになります。テキストをカードに表示し、画像とともにアニメーション化できるように構成する必要があるものはありますか?それとも、カードのすべての要素に個別にカスタム アニメーションを追加する必要がありますか?

4

1 に答える 1

1

Android APIのドキュメントを読んでいるときに、自分で答えに出くわしたと思うので、誰かが同じ問題を抱えている場合に備えて、ここに投稿するだけだと思いました。

アニメーションを呼び出す前にdrawingCacheを有効にするには:

cardLayout.setDrawingCacheEnabled(true);

アニメーションを開始する前に、レイアウトをビットマップとしてレンダリングします。これには、レイアウトに含まれるテキストが含まれます。

于 2013-01-02T19:45:43.837 に答える