【问题标题】:Change alpha of image view by clicking button通过单击按钮更改图像视图的 alpha
【发布时间】:2014-06-27 13:48:47
【问题描述】:

我正在开发一个 Android 项目。

在这个项目中,我有一个 ImageView 和一个按钮。当用户点击按钮时,我希望 ImageView 的 alpha 从 1 变为 0.5,然后立即从 0.5 变为 1。

我写了以下代码:

public void animate(ImageView imageView)
{
    int animDuration = 50;
    int timeBetween = 2;

    AlphaAnimation animation1 = new AlphaAnimation(1, (float) 0.5);
    animation1.setInterpolator(new AccelerateInterpolator());
    animation1.setDuration(animDuration);

    AlphaAnimation animation2 = new AlphaAnimation((float) 0.5, 1);
    animation2.setInterpolator(new AccelerateInterpolator());
    animation2.setStartOffset(animDuration + timeBetween);
    animation2.setDuration(animDuration);

    AnimationSet animation = new AnimationSet(true);
    animation.addAnimation(animation1);
    animation.addAnimation(animation2);
    animation.setRepeatCount(1);

    imageView.setAnimation(animation);
}

当用户点击它时,我将我的 ImageView 传递给这个函数。

但它不能正常工作,并且没有任何变化。有什么问题?

【问题讨论】:

  • 你的时间价值很短。也许你的眼睛无法检测到它。例如,用 aimDuration 500 和 timeBetween 1000 试试。
  • @Opiatefuchs:没有。我将目标持续时间增加到 500,但没有任何改变。 :(

标签: android animation alpha


【解决方案1】:

来自View.setAnimation() 文档(重点是我的):

设置为此视图播放的下一个动画。 如果您希望动画立即播放,请改用 startAnimation(android.view.animation.Animation)。 此方法允许对开始时间和失效进行细粒度控制,但您必须确保1) 动画设置了开始时间,并且 2) 视图的父级(控制其子级的动画)将在动画应该开始时失效。

虽然您为animation2 设置了开始偏移量,但您并没有为AnimationSet 本身设置开始时间,因此View 不知道何时开始动画。

如果您希望动画立即开始,请改用startAnimation()。如果您希望动画在特定时间开始,请在 AnimationSet 上调用 setStartTime()setStartOffset()

【讨论】:

    【解决方案2】:

    你可以试试这个动画代码:

    <set xmlns:android="http://schemas.android.com/apk/res/android" >
    <alpha
            android:duration="1000"
            android:fromAlpha="1"
            android:interpolator="@android:anim/accelerate_interpolator"
            android:toAlpha="0.5"
            android:repeatMode="reverse" 
            android:repeatCount="1"/>
    </set>
    

    并像这样在您的活动中设置此动画:

    anim = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.animatealpha); 
    image.startAnimation(anim);
    

    这里 animatealpha 是包含上述动画的 xml 的名称。 希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2014-04-17
      • 2020-12-30
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      • 2019-12-03
      • 1970-01-01
      • 1970-01-01
      • 2017-01-21
      相关资源
      最近更新 更多