假设我有ImageButton btn
。我有两个不同的Bitmap
,bmp1
和bmp2
。默认情况下,btn
会显示bmp1
,如下所示:
btn.setImageBitmap(bmp1);
在调用以下内容时,我能以某种方式制作一个交叉淡化bmp1
和bmp2
的动画:
btn.setImageBitmap(bmp2);
所以问题是,是否可以 - 如果是,如何 - 动画更改ImageButtons上的位图?
答案 0 :(得分:7)
我看到它的方式,实现此功能有两种主要方式。请注意,可能还有其他方法可以完全按照您的描述进行此操作,但这些方法将是我的方法。
onAnimationEnd()
回调在这里,您希望基本淡出第一个ImageButton
,更改onAnimationEnd()
回调中的资源,然后将其淡入。要执行此操作,您必须执行以下操作代码。
在XML中创建一个用于淡化Animation
的{{1}}资源:
View
在XML中创建一个<!-- 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>
资源,用于淡化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
,并按如下方式构建:
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
结束后,您将淡出第一个ImageButton
并淡出第二个(与上面的示例非常相似)。
我希望这个答案符合你的期望。如果有任何代码错误,我很抱歉,因为我现在没有编辑器这样做。如果您需要任何其他说明,请与我们联系!
答案 1 :(得分:1)
无法为图像按钮源更改设置动画。解决方法是堆叠两个ImageButton并分别为其alfa通道设置动画以获得预期的行为。