我有5个背景的图像视图可供选择。我想淡出image2并将image5设置为背景,淡入效果。这应该随意改变。问题是,我该如何有效地做到这一点?
这就是我使用系统动画给出淡入和淡出效果的方法 -
淡出
Animation out = AnimationUtils.makeOutAnimation(this, true);
viewToAnimate.startAnimation(out);
viewToAnimate.setVisibility(View.INVISIBLE);
淡入
Animation in = AnimationUtils.loadAnimation(this, android.R.anim.fade_in);
viewToAnimate.startAnimation(in);
viewToAnimate.setVisibility(View.VISIBLE);
这就是我改变背景的方式 -
search_engine_identifier.setImageResource(R.drawable.ic_yahoo);
答案 0 :(得分:0)
您可以使用Android中的帧动画来更改ImageView的背景。
<强>动画-列表强>
动画列表是首选的默认帧动画,因为它是在API 1中引入的。它可以在任何地方使用,而且很简单。它只是以给定的持续时间以给定的顺序循环显示一系列提供的图像。
以下是我心脏填充动画列表的示例,放在 res / drawable / animation_list_filling.xml 中:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true">
<item
android:duration="500"
android:drawable="@drawable/ic_heart_0"/>
<item
android:duration="500"
android:drawable="@drawable/ic_heart_25"/>
<item
android:duration="500"
android:drawable="@drawable/ic_heart_50"/>
<item
android:duration="500"
android:drawable="@drawable/ic_heart_75"/>
<item
android:duration="500"
android:drawable="@drawable/ic_heart_100"/>
</animation-list>
设置ImageViews
是时候设置一些 ImageViews 供我们玩了。具体来说,我们将有三个ImageView,一个用于我们之前定义的每个XML Drawable。将以下代码放在您选择的布局中,并将其放入Activity:
<ImageView
android:id="@+id/imageview_animation_list_filling"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/animation_list_filling"
/>
启动动画
ImageView mImageViewFilling = (ImageView) findViewById(R.id.imageview_animation_list_filling);
((AnimationDrawable) mImageViewFilling.getBackground()).start();
答案 1 :(得分:0)
在xml中创建两个,您可以从here获取,然后像这样加载它们。
ImageView myImageView = (ImageView) findViewById(R.id.imageView2);
Animation myFadeInAnimation = AnimationUtils.loadAnimation(Splash.this, R.anim.fadein)
Animation myFadeOutAnimation = AnimationUtils.loadAnimation(Splash.this, R.anim.fadeout);
int value = 0; // Global Type
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(value%2 == 0){
doFadeOutAnimation();
}else{
doFadeInAnimation();
}
value ++;
}
});
答案 2 :(得分:0)
另一种方法是使用Android的View Animator类之一,例如ObjectAnimator。这就是我正在做的事情:
1)将要使用的图像的可绘制ID添加到int数组中。
2)为fadeIn和fadeOut动画创建ObjectAnimators。您可以设置淡入的持续时间并淡出为您想要的任何内容。
3)将一个AnimatorListener添加到fadeOut ObjectAnimator中,这样当它完成时,它将设置新图像(通过从图像数组中选择一个随机数来随机选择),然后它将使用新图像淡入,使用fadeIn ObjectAnimator。
4)创建一个runnable并在其运行方法中,启动fadeOut动画。
5)在runnable上调用handler.postDelayed并使用它来决定你希望每个图像在淡出之前保留多长时间。
6)在Runnable的run方法结束时,再次调用handler.postDelayed以使图像继续淡入淡出,但是你应该确保你有某种条件语句让你可以在需要时停止动画,这就是为什么我使用布尔&#34;运行&#34;所以当我需要停止处理程序循环时,我可以将其设置为false。
ImageView mImageView = (ImageView) findViewById(R.id.imageView);
boolean running = true;
final int[] images = {R.drawable.image1, R.drawable.image2, R.drawable.image3,
R.drawable.image4, R.drawable.image5};
final Random random = new Random();
final Handler handler = new Handler();
final ObjectAnimator fadeIn = ObjectAnimator.ofFloat(mImageView, "alpha", 0f, 1f);
fadeIn.setDuration(1000);
final ObjectAnimator fadeOut = ObjectAnimator.ofFloat(mImageView, "alpha", 1f, 0f);
fadeOut.setDuration(1000);
fadeOut.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
int rand = random.nextInt(images.length);
mImageView.setImageResource(images[rand]);
fadeIn.start();
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
Runnable runnable = new Runnable() {
@Override
public void run() {
fadeOut.start();
if (running) {
handler.postDelayed(this, 5000);
}
}
};
handler.postDelayed(runnable, 5000);
}
这将通过淡入/淡出动画连续循环选定的图像(随机)。您可以添加一些检查以确保相同的图像不会连续出现两次等。