Android:按钮淡出问题

时间:2015-07-27 23:33:37

标签: java android animation button fade

我创建了一个按钮,当它被触摸时淡入淡出,当它不被触发时淡出。我能够通过在java中使用setAlpha来实现这一点。代码和问题如下所示:

Permanent.increment

我遇到的问题是每当我释放按钮时,在Permanent.value能够完全播放之前alpha设置为0,因此按钮不会淡出。

如果我删除该行:

    buttonPressed.getBackground().setAlpha(0);

    buttonPressed.setOnTouchListener(new View.OnTouchListener() {

        public boolean onTouch(View view, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                buttonPressed.getBackground().setAlpha(255);
                buttonPressed.startAnimation(animationFadeIn);
                return true;
            } else if (event.getAction() == MotionEvent.ACTION_UP) {
                buttonPressed.startAnimation(animationFadeOut);
                return true;
            }
            return false;
        }
    });

然后animationFadeOut将播放,但会立即返回buttonPressed.getBackground().setAlpha(0);

当用户停止触摸按钮时,如何让animationFadeOut完全播放并让按钮字母为setAlpha(255)

2 个答案:

答案 0 :(得分:1)

我认为使用setInterpolator()进行fadeIn和fadeOut动画可以解决您的问题。 例如:     动画animationFadeIn = new AlphaAnimation(0,1);     animationFadeIn.setInterpolator(new DecelerateInterpolator());     animationFadeIn.setDuration(1000);

Animation animationFadeOut = new AlphaAnimation(1, 0);
animationFadeOut.setInterpolator(new AccelerateInterpolator());
animationFadeOut.setDuration(1000);

我从this链接获得了解决方案,您可以了解有关AccelerateInterpolator here的更多信息。

目前无法测试。但似乎很有希望。希望这有帮助!

答案 1 :(得分:0)

最好不要手动设置alpha,使用动画设置alpha

// Define the animators
Animation fadeInAnimation = new AlphaAnimation(0.0f, 1.0f);
Animation fadeOutAnimation = new AlphaAnimation(1.0f, 0.0f);

// Duration of animation
fadeInAnimation.setDuration(1000);
fadeOutAnimation.setDuration(1000);

public boolean onTouch(View view, MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        buttonPressed.startAnimation(fadeInAnimation);
        return true;
     } else if (event.getAction() == MotionEvent.ACTION_UP) {
        buttonPressed.startAnimation(fadeOutAnimation);
        return true;
     }
     return false;
  }