5秒ごとにランダムに背景画像を変更できるコードを記述しました。今はフェードイン/アウトアニメーションを使用して背景画像を変更したいのですが、このアニメーションの使用方法がわかりません。
これは私のソースです:
void handlechange() {
Handler hand = new Handler();
hand.postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
// change image here
change();
}
private void change() {
// TODO Auto-generated method stub
Random Rand = new Random();
int index = Rand.nextInt(image_rundow.length);
mapimg.setBackgroundResource(image_rundow[index]);
handlechange();
}
}, 4000);
}
現時点ではすべてが大丈夫です。背景画像をランダムに変更できますが、アニメーションのフェードイン/フェードアウトを使用する方法がわかりません。
誰かが解決策を知っているなら、助けてください、ありがとう。
これらのコードを呼び出す必要があります。
まず、このようなフェードインとフェードアウトのアニメーション用に2つのxmlファイルを作成する必要があります。
fade_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
<alpha
Android:fromAlpha="0.0"
Android:toAlpha="1.0"
Android:fillAfter="true"
Android:duration="2000"
/>
</set>
fade_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
<alpha
Android:fromAlpha="1.0"
Android:toAlpha="0.0"
Android:fillAfter="true"
Android:duration="2000"
/>
</set>
次に、以下のようにimageViewのアニメーションを実行し、フェードインが終了したときにフェードアウトを変更するようにAnimationListenerを設定する必要があります。
Animation fadeOut = AnimationUtils.loadAnimation(YourActivity.this, R.anim.fade_out);
imageView.startAnimation(fadeOut);
fadeOut.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
Animation fadeIn = AnimationUtils.loadAnimation(YourActivity.this, R.anim.fade_in);
imageView.startAnimation(fadeIn);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
フェードインアニメーションの場合、resフォルダーに「anim」という名前の新しいフォルダーを作成し、その中に次のコードで「fade_in.xml」を作成します
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<alpha
Android:duration="@Android:integer/config_mediumAnimTime"
Android:fromAlpha="0.0"
Android:interpolator="@Android:anim/decelerate_interpolator"
Android:toAlpha="1.0" />
</set>
このアニメーションをimageviewで実行するには、アクティビティで次のコードを使用します
Animation anim = AnimationUtils.loadAnimation(YourActivity.this, R.anim.fade_in);
imageView.setAnimation(anim);
anim.start();
フェードアウトアニメーションの場合は、Android:fromAlphaとAndroid:toAlphaの値を交換するだけです
お役に立てれば。
RelativeLayoutを使用して、高さと幅の両方を設定する背景ビューの1つのレイヤーを追加できます。他のすべてのUI要素は、このビューの上に配置する必要があります。あなたのコードで。 fadeOutとfadeInアニメーションを定義します。 IDでその背景ビューを見つけて、次のようにします。
xxxBackground.startAnimation(fadeOut);
xxxBackground.setBackgroundResource(R.drawable.your_random_pic);
xxxBackground.startAnimation(fadeIn);
補間を使用してパフォーマンスを調整できます。
アニメーション付きのAnimationDrawableが必要です。
最初のステップAnimationDrawable
-/res/anim/anim_Android.xmlファイルを作成します
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:Android="http://schemas.Android.com/apk/res/Android"android:oneshot="false">
<item Android:drawable="@drawable/Android_1"
Android:duration="100"/>
<item Android:drawable="@drawable/Android_2"
Android:duration="100"/>
<item Android:drawable="@drawable/Android_3"
Android:duration="100"/>
<item Android:drawable="@drawable/Android_4"
Android:duration="100"/>
<item Android:drawable="@drawable/Android_5"
Android:duration="100"/>
<item Android:drawable="@drawable/Android_6"
Android:duration="100"/>
<item Android:drawable="@drawable/Android_7"
Android:duration="100"/>
</animation-list>
-ImageViewをAndroid:src = "@ anim/anim_Android"で追加します。
<ImageView
Android:id="@+id/myanimation"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@anim/anim_Android" />
第二段階
-アクティビティでAnimationDrawableとAnimationを作成します
AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getDrawable();
animationDrawable.setOneShot(true);
animationDrawable.start();
Animation animation = AnimationUtils.loadAnimation(YourActivity.this, Android.R.anim.fade_in);
imageView.setAnimation(animation);
animation.start();
animation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
Animation fadeOut = AnimationUtils.loadAnimation(YourActivity.this, Android.R.anim.fade_out);
imageView.startAnimation(fadeOut);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
ハンドラーは必要ありません。
kimkevin で回答すると、View
の背景ではなく、ImageView
(TextView
、View
など)をアニメーション化します。つまり、View
を強調表示するだけの場合は、その後ろに別のView
を追加し(backgroundViewと呼ぶことにします)、そのbackgroundViewをアニメーション化する必要があります。
ビューの背景をアニメーション化するには、次のコードを使用します
val startColor = view.solidColor
val endColor = ContextCompat.getColor(context, R.color.your_color)
val colorAnim = ObjectAnimator.ofInt(view, "backgroundColor", startColor, endColor, startColor)
colorAnim.duration = 2000
colorAnim.setEvaluator(ArgbEvaluator())
colorAnim.start()