0

次の「数字」ウィジェットのいくつかのインスタンスで構成される単純なフリップクロック/カウンター/ティッカーウィジェットを実装しています:

ここに画像の説明を入力

背景画像の上に配置された数字です。数字は、上にスライドして次の数字を表示することにより、毎秒アニメーション化することになっています。アニメーション中、両方の数字が背景の境界内に留まる必要があります。

次の数字が完全に表示されるまで、TextView2 行 (1 行に 1 桁) を使用し、 this の位置を上向きにアニメーション化することで、この動作を実現しようとしています。TextViewそして、TextViews の位置をリセットし、両方の数字を同時に置き換えて、気付かないようにします。次に、このプロセスを繰り返して、アニメーションが終わらないように見せます。

ここでは、0 の一部と 9 の一部が表示されているアニメーションの中間状態を確認できます。layout_marginTopプロパティを負の値に設定することにより、Eclipse のグラフィカル レイアウト エディタで「モック」しました。

ここに画像の説明を入力

これがレイアウト ファイルです (前述の属性は通常存在しません)。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="20dp"
    android:layout_height="38dp"
    android:background="@drawable/background_countdown_normal_grey"
    android:clipChildren="false" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clipChildren="false"
        android:paddingBottom="5dp"
        android:paddingTop="5dp" >

        <TextView
            android:id="@+id/textview_countdown_digit"
            style="@style/TextView.CountdownDigit"
            android:layout_marginTop="-12dp"
            android:text="0\n9" />
    </LinearLayout>

</LinearLayout>

私は2つの解決策を試しました。ViewPropertyAnimatorまたは のいずれtranslateYかで使用するyと、スムーズなアニメーションが得られますが、 の元のクリッピングはTextViewアニメーション中に変化しないため、実際には 2 番目の数字が表示されることはありません。ご覧のとおり、clipChildrenプロパティを試してみましたが、何も変わらないようです。

私の 2 番目のアプローチは、 のを変更するValueAnimatorcustomを使用することでした。動作しますが、ハイエンド デバイスでもアニメーションが非常に不安定です。EvaluatortopMarginLayoutParamsTextView

だから私の質問は、アニメーション中にビューのクリッピングを回避し、効率的な方法で行う方法ですか? より良いアプローチはありますか?

4

1 に答える 1