仅对ImageView的"src" alpha属性进行动画处理,而不是整个视图。

4

我有一个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?

谢谢

3个回答

3
使用imageView的源图像进行动画处理有一些技巧,大多数情况下需要将imageView包装到某个ViewGroup中。但如果你只想使它的透明度(淡入/淡出)发生动画变化,那么使用TransitionDrawable非常容易实现:
TransitionDrawable transitionDrawable = new TransitionDrawable(new Drawable[]{
       new ColorDrawable(Color.TRANSPARENT),
       getResources().getDrawable(R.drawable.my_image)
   });
imageview.setImageDrawable(transitionDrawable);
transitionDrawable.startTransition(300);

感谢您提供这段代码,我想实现一个简单的淡入效果,同时保留图像的背景颜色。 由于“getResources().getDrawable(R.drawable.my_image)”已经过时,我将其替换为“ResourcesCompat.getDrawable(getResources(), R.drawable.your_drawable, null)”,并且它完美地运行了! - Marios

1

ImageView包装在一个ViewGroup中,例如LinearLayout,该ViewGroupwrap_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分别为0.5和1时的以下结果。

                               enter image description here


1

你有两种选择:

1)将一个透明的ImageView放在一个灰色容器中(简单)。最简单的容器是FrameLayout

2)使用ImageView.setAlpha(int)方法来动画显示包含图像的alpha值。该方法需要一个整数作为参数,范围从0(完全透明)到255(完全不透明)。要动画显示这样的自定义属性,您需要使用ObjectAnimatorNineOldAndroids


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接