假设我有一个ImageButton btn
. 我有两个不同Bitmap
的,bmp1
和bmp2
。默认情况下,btn
显示bmp1
,如下所示:
btn.setImageBitmap(bmp1);
在调用以下命令时bmp1
,我可以以某种方式制作一个交叉淡入淡出的动画吗?bmp2
btn.setImageBitmap(bmp2);
所以问题是,是否有可能 - 如果是,如何 - 动画化 ImageButtons 上位图的变化?
假设我有一个ImageButton btn
. 我有两个不同Bitmap
的,bmp1
和bmp2
。默认情况下,btn
显示bmp1
,如下所示:
btn.setImageBitmap(bmp1);
在调用以下命令时bmp1
,我可以以某种方式制作一个交叉淡入淡出的动画吗?bmp2
btn.setImageBitmap(bmp2);
所以问题是,是否有可能 - 如果是,如何 - 动画化 ImageButtons 上位图的变化?
在我看来,实现此功能有两种主要方法。请注意,可能还有其他方法可以完全按照您的描述发生这种情况,但这些将是我的方法。
onAnimationEnd()
回调在这里,您需要从本质上淡出第一个ImageButton
,更改onAnimationEnd()
回调中的资源,然后将其淡入。为此,您必须实现以下代码。
在 XML 中创建一个Animation
用于淡入的资源View
:
<!-- Filename: fadein.xml -->
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Note that you might want to change the duration here-->
<alpha
android:fromAlpha="0.0"
android:toAlpha="1.0"
android:duration="250"/>
</set>
在 XML 中创建一个Animation
用于淡出的资源View
:
<!-- Filename: fadeout.xml -->
<set xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Note that you might want to change the duration here-->
<alpha
android:fromAlpha="1.0"
android:toAlpha="0.0"
android:duration="250"/>
</set>
在代码中加载淡出和淡入Animation
:
// Obtain a reference to the Activity Context
Context context = getContext();
// Create the Animation objects.
Animation outAnimation = AnimationUtils.loadAnimation(context, R.anim.fadeout);
Animation inAnimation = AnimationUtils.loadAnimation(context, R.anim.fadein);
AnimationListener
为 this分配一个 new Animation
,并按如下方式构建它:
outAnimation.setAnimationListener(new AnimationListener(){
// Other callback methods omitted for clarity.
public void onAnimationEnd(Animation animation){
// Modify the resource of the ImageButton
yourImageButton.setImageResource(R.drawable.[your_second_image]);
// Create the new Animation to apply to the ImageButton.
yourImageButton.startAnimation(inAnimation);
}
}
将 分配Animation
给ImageButton
,然后开始第一个Animation
:
yourImageButton.startAnimation(outAnimation);
然后,如果您希望动画回到前一个图像,您只需执行相同的操作,但顺序相反。
ImageButton
对于这种方法,您只需将两个ImageButton
s 分配给屏幕上的相同坐标,并具有相同的宽度。然后,您将ImageButton
在第一个结束后淡出第一个并淡入第二个Animation
(很像上面的示例)。
我希望这个答案符合您的期望。如果有任何代码错误,我深表歉意,因为我目前在没有编辑器的情况下这样做。如果您需要任何额外的说明,请告诉我!
无法为图像按钮源更改设置动画。解决方法是堆叠两个 ImageButton 并分别为其 alfa 通道设置动画以获得预期的行为。