【问题标题】:Animate only the "src" alpha attribute of ImageView instead of the entire view仅对 ImageView 的“src”alpha 属性而不是整个视图进行动画处理
【发布时间】:2023-03-24 04:05:01
【问题描述】:

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

谢谢

【问题讨论】:

    标签: android xml opacity src


    【解决方案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(完全不透明)。要为这样的自定义属性设置动画,您需要使用 ObjectAnimatorNineOldAndroids

      【讨论】:

        猜你喜欢
        • 2012-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-03
        • 2021-01-05
        • 1970-01-01
        • 2020-01-12
        • 2019-11-12
        • 1970-01-01
        相关资源
        最近更新 更多