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

Posted

技术标签:

【中文标题】仅对 ImageView 的“src”alpha 属性而不是整个视图进行动画处理【英文标题】:Animate only the "src" alpha attribute of ImageView instead of the entire view 【发布时间】:2014-07-12 23:09:53 【问题描述】:

我有一个 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 的不透明度设置动画?

谢谢

【问题讨论】:

【参考方案1】:

imageView 的源图像上的动画很棘手,在大多数情况下需要将 imageView 包装到某个 ViewGroup 中,但如果您只想为其 alpha 设置动画(淡入/淡出),使用 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)” 并且效果很好!【参考方案2】:

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 分别为 0.5 和 1。

                             

【讨论】:

【参考方案3】:

你有两个选择:

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

2) 使用ImageView.setAlpha(int) 方法对包含图像的 alpha 进行动画处理。该方法采用整数作为参数,范围从 0(完全透明)到 255(完全不透明)。要为这样的自定义属性设置动画,您需要使用 ObjectAnimator 或 NineOldAndroids。

【讨论】:

以上是关于仅对 ImageView 的“src”alpha 属性而不是整个视图进行动画处理的主要内容,如果未能解决你的问题,请参考以下文章

在Android中处理ALPHA_8位图并在ImageView中显示

Android如何获取当前ImageView中的src资源

安卓imageview怎么在代码中设置src

如何获取ImageView属性,例如src

ImageView的src与background

Android imageview src正在改变