java Alpha动画在冰淇淋三明治上不能正常工作
我正在开发的应用程序的一部分是使用TextView
作为按钮,规范要求这些无背景和无边框按钮在按下时向用户提供某种方式的反馈。我们决定调整视图的alpha值以提供反馈-按下时为40%,否则返回100%。为了促进这一点,我编写了一个helper方法,在给定的视图上添加一个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;
}
});
}
作为参考,button
与toFade
不同,因为在某些情况下,实际的可触摸区域应该是一个完整的布局,但我们正在淡入淡出的视图只是其中的一部分
现在,在大多数情况下,这是完美的。我已经在我们支持的API级别(姜饼和Kitkat)的低端和高端进行了测试,结果都很好。但在冰激凌三明治上,这个听众只起了部分作用。ACTION_DOWN
部分的行为与预期一致,按下时视图会淡入淡出状态。正如我从日志语句中确定的,ACTION_UP
/ACTION_CANCEL
部分激发,但动画只是。。。没有发生。视图将永久保持40%的不透明度,直到用户离开并返回页面。我已经在运行4.0.3的物理设备和运行4.0.4的BlueStacks emulator上测试了这一点,并且在这两个设备上都一致地进行了复制
所以我的问题是:ICS上是否存在已知的AlphaAnimation
错误或类似的错误?我无法想象还有什么会导致这个问题,因为它是如何进入实际运行toFade.startAnimation(releaseAnim);
的代码块的。我做了一些挖掘,但我找到的大多数答案都与人们在XML中设置安卓:alpha
属性有关,而我没有这样做
作为旁注,我目前正在尝试一种变通方法,要求toFade
成为TextView
,然后将其文本颜色更改为带有更改alpha的旧RGB值。如果这适用于所有Android版本,我可能会坚持使用它,但我仍然想知道这里发生了什么,因为这是我在Android上工作时遇到的最神秘的bug之一
共 (0) 个答案