24

a を使用しValueAnimatorて aTextViewのテキストの色を 2 つの異なる色の間で 2 回点滅させたいのですが、XML でアニメーションを作成したいと考えています。例が見つかりません。どんな助けでも大歓迎です。

アップデート

以下のコードは完璧に機能します。色は黒から青、青から黒、黒から青、青から黒に変化し、それぞれの逆方向の繰り返しの間には 500 ミリ秒あります。ただし、アニメーターxmlファイルからこれを機能させようとしています。

ValueAnimator colorAnim = ObjectAnimator.OfInt(objectToFlash, "textColor", (int)fromColor, (int)toColor);
colorAnim.SetDuration(500);
colorAnim.SetEvaluator(new ArgbEvaluator());
colorAnim.RepeatCount = 3;
colorAnim.RepeatMode = ValueAnimatorRepeatMode.Reverse;

xml

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
        android:propertyName="textColor"        
        android:duration="500"
        android:valueFrom="@color/black"
        android:valueTo="@color/ei_blue"
        android:repeatCount="3"
        android:repeatMode="reverse" /> 

コード

ValueAnimator anim = (ObjectAnimator)AnimatorInflater.LoadAnimator(Activity, Resource.Animator.blinking_text);
anim.SetTarget(objectToFlash);

xml を使用すると、TextViewのテキストの色が 500 ミリ秒以内に何度でも変化します。

更新 必要なのは、OfInt 呼び出しがプログラムで行っていることを xml で模倣するためのキーフレームだと思います。今これを試していますが、今のところ運がありません。

4

3 に答える 3

32

これを試して:

private static final int RED = 0xffFF8080;
private static final int BLUE = 0xff8080FF;

ValueAnimator colorAnim = ObjectAnimator.ofInt(myTextView, "backgroundColor", RED, BLUE);
        colorAnim.setDuration(3000);
        colorAnim.setEvaluator(new ArgbEvaluator());
        colorAnim.setRepeatCount(ValueAnimator.INFINITE);
        colorAnim.setRepeatMode(ValueAnimator.REVERSE);
        colorAnim.start();

または、xml 経由でこの未テストの方法を試してください: *res/animator/property_animator.xml*

<set >

<objectAnimator
    android:propertyName="backgroundColor"
    android:duration="3000"
    android:valueFrom="#FFFF8080"
    android:valueTo="#FF8080FF"
    android:repeatCount="-1"
    android:repeatMode="reverse" />
</set>

今Javaコードで:

AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,
R.anim.property_animator);
set.setTarget(myTextView);
set.start();
于 2013-03-23T01:51:16.123 に答える
3

あなたが説明する問題は、XML で指定されたオブジェクト アニメーターが、色補間のために ArgbEvaluator を正しく割り当てていないことです。

この問題を解決するには、必要に応じて色間をトゥイーンするオブジェクト アニメーター XML を作成します。次に、ソース コードで次の操作を行い、アニメーターが使用するエバリュエーターが ArgbEvaluator であることを確認します。

ObjectAnimator colorAnimator = (ObjectAnimator)AnimatorInflater.loadAnimator(this, R.animator.color_rotation);
colorAnimator.setTarget(objectToFlash);
colorAnimator.setEvaluator(new ArgbEvaluator());
colorAnimator.start();
于 2014-01-16T19:11:27.357 に答える