我有一个ImageView,最初是空的。它的背景设置为灰色:
<ImageView
android:background="#333" />
从互联网上获取其位图后,我想将其设置为src属性,但要优雅地淡化它。我见过的动画示例就是这样的:
// fade_in.xml
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<alpha
android:duration="2000"
android:fromAlpha="0.0"
android:interpolator="@android:anim/accelerate_interpolator"
android:toAlpha="1.0" />
</set>
但这是为整个ImageView的不透明度设置动画。它具有在淡入之前首先隐藏ImageView的效果,因此您在动画开始时看到一个小弹出窗口,首先设置为alpha = 0。
有没有办法为“src”属性的不透明度设置动画而不是整个ImageView?
由于
答案 0 :(得分:3)
imageView的源图像上的动画很棘手,并且在大多数情况下涉及将imageView包装到某个ViewGroup中,但如果您想要做的就是设置其alpha(淡入/淡出)动画,那么使用TransitionDrawable非常容易:< / p>
TransitionDrawable transitionDrawable = new TransitionDrawable(new Drawable[]{
new ColorDrawable(Color.TRANSPARENT),
getResources().getDrawable(R.drawable.my_image)
});
imageview.setImageDrawable(transitionDrawable);
transitionDrawable.startTransition(300);
答案 1 :(得分:1)
将ImageView
包裹在ViewGroup
内LinearLayout
wrap_content
,<LinearLayout
android:layout_width='wrap_content'
android:layout_height='wrap_content'
android:background='#ff0000'>
<ImageView src='@drawable/ic_launcher'
android:layout_width='wrap_content'
android:layout_height='wrap_content'/>
</LinearLayout>
将alpha
并保留所有您希望保持可见的设置,例如背景颜色。像这样:
{{1}}
这将导致以下结果,{{1}}分别为0.5和1。
答案 2 :(得分:1)
您有两个选择:
1)将透明的ImageView
放入灰色容器中(简单)。最简单的容器是FrameLayout
。
2)使用ImageView.setAlpha(int)
方法为包含图像的alpha设置动画。此方法采用整数作为参数,范围从0(完全透明)到255(完全不透明)。要为此类自定义属性设置动画,您需要使用ObjectAnimator
或NineOldAndroids。