3

背景色が赤から青に変化し続ける画面を作りたいです。ValueAnimator をインスタンス化しようとすると、何らかの理由で常にクラッシュします。コードの何が問題なのかわかりません

ありがとうございました

アニメーションクラス

public BackgroundAnimation(Context context){
    super(context);
    ValueAnimator colorAnim = ObjectAnimator.ofInt(R.anim.animator, "backgroundColor", Color.RED, Color.BLUE);
    colorAnim.setDuration(3000);
    colorAnim.setEvaluator(new ArgbEvaluator());
    colorAnim.setRepeatCount(ValueAnimator.INFINITE);
    colorAnim.setRepeatMode(ValueAnimator.REVERSE);
   colorAnim.start();

}

アニメータ.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">   
   <objectAnimator
         android:propertyName="backgroundColor"/>
</set>

メインクラス

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.menu);

    LinearLayout container = (LinearLayout) findViewById(R.id.container);
    container.addView(new BackgroundAnimation(this));

}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">

<TextView
    android:id="@+id/TextView01"
    android:gravity="center"
    android:textSize="20sp"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"/>

<TextView
    android:id="@+id/TextView02"
    android:gravity="center"
    android:textSize="20sp"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"/>

<ImageView
    android:id="@+id/ImageView01"
    android:layout_width="fill_parent"
    android:layout_height="300sp"/>

</LinearLayout>
4

4 に答える 4

3

ObjectAnimator を使用して背景色を変更できます。

API >= 21 の場合:

ObjectAnimator colorAnimator = ObjectAnimator.ofArgb(travelersListView.getBackground().mutate(), "tint", mCurrentBackground, mFadeColor);
colorAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
colorAnimator.start();

API 16 からの下位サポートについては、これを使用します。

ObjectAnimator colorAnimator = ObjectAnimator.ofObject(travelersListView.getBackground().mutate(), "tint", new ArgbEvaluator(), mCurrentBackground, mFadeColor);
colorAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
colorAnimator.start();
于 2015-11-22T09:12:25.780 に答える
2

LinearLayout の XML ファイルには id パラメータがありません。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:id="@+id/container">
于 2012-04-30T13:30:03.133 に答える
1
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.menu);

LinearLayout container = (LinearLayout) findViewById(R.id.container);

changeBackground(container, "#F44336", "#2196F3"); //#F44336 : Red , #2196F3 : Blue

}

public void changeBackground(final View view, String color1, String color2) {
    ValueAnimator anim = new ValueAnimator();
    anim.setIntValues(Color.parseColor(color1), Color.parseColor(color2));
    anim.setEvaluator(new ArgbEvaluator());
    anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator valueAnimator) {

            view.setBackgroundColor((Integer) valueAnimator.getAnimatedValue());
        }
    });

    anim.setDuration(2000);
    anim.setRepeatCount(ValueAnimator.INFINITE);
    anim.setRepeatMode(ValueAnimator.REVERSE);
    anim.start();
}

これを試してください、これが役立つことを願っています

于 2016-02-19T10:48:39.170 に答える
0

ObjectAnimator.ofInt()パラメータとしてリソース ID を取るバリアントはありません。XML でのアニメーションの宣言については、こちらをお読みください。 http://developer.android.com/guide/topics/graphics/prop-animation.html#declaring-xml

于 2013-03-23T08:27:08.563 に答える