AlphaAnimations在冰淇淋三明治上无法正常工作

时间:2014-06-25 17:16:49

标签: java android android-4.0-ice-cream-sandwich

我正在处理的应用程序的一部分是使用TextView作为按钮,并且规范要求这些无背景和无边框按钮在按下时向用户提供某种方式的反馈。我们决定调整观点' alpha值以提供反馈 - 按下时为40%,否则返回100%。为了实现这一点,我编写了一个帮助方法,将OnTouchListener拍到给定视图上,通过使用持续时间为0的AlphaAnimation来调整alpha值。这里的方法是:

protected void setButtonFade(View button, final View toFade) {
    button.setOnTouchListener(new OnTouchListener() {

        private AlphaAnimation pressAnim = new AlphaAnimation(1.0f, 0.4f);
        private AlphaAnimation releaseAnim = new AlphaAnimation(0.4f, 1.0f);

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (v.isClickable()) {
                switch (event.getActionMasked()) {
                    case MotionEvent.ACTION_DOWN:
                        Log.i(TAG, "ACTION_DOWN detected, performing pressAnim");
                        pressAnim.setDuration(0);
                        pressAnim.setFillAfter(true);
                        toFade.startAnimation(pressAnim);
                        break;
                    case MotionEvent.ACTION_UP:
                    case MotionEvent.ACTION_CANCEL:
                        Log.i(TAG, "ACTION_UP or ACTION_CANCEL (actual value=" + event.getActionMasked() + ") detected, performing releaseAnim");
                        releaseAnim.setDuration(0);
                        releaseAnim.setFillAfter(true);
                        toFade.startAnimation(releaseAnim);
                        break;
                }
            }
            return false;
        }
    });
}

作为参考,buttontoFade不同,因为在某些情况下,实际的可触摸区域应该是整个布局,但我们褪色的视图只是其中的一部分。< / p>

现在,在大多数情况下,这完美无缺。我已经在我们支持的API级别的低端和高端测试了它(分别是Gingerbread和Kitkat),它一切都很好。但是在Ice Cream Sandwich上,这个听众只能部分工作。 ACTION_DOWN部分按预期运行,按下时视图会消失。我根据日志记录语句确定了ACTION_UP / ACTION_CANCEL部分触发,但动画只是......没有发生。在用户离开然后返回页面之前,视图将永久保持40%的不透明度。我已经在运行4.0.3的物理设备和运行4.0.4的BlueStacks仿真器上对此进行了测试,并且两者都在一致地再现。

所以我的问题是:在ICS上有AlphaAnimation的已知错误或类似内容吗?我无法想象还有什么可能导致问题,看看它是如何进入实际运行toFade.startAnimation(releaseAnim);的代码块的。我已经完成了一些挖掘工作,但我发现的大多数答案都与人们在XML中设置android:alpha属性有关,我没有这样做。

作为旁注,我正在尝试一种解决方法,要求toFade成为TextView,然后将其文本颜色更改为旧的RGB值,并更改为alpha 。如果这适用于所有Android版本,我可能最终会坚持使用它,但我仍然想知道这里发生了什么,因为这是我遇到的最神秘的错误之一在Android上工作时。

0 个答案:

没有答案