我试图实现ActionBar中的图标不会离散地改变状态,而是通过淡化动画。当我将android:enterFadeDuration
和android:exitFadeDuration
添加到选择标记时,我的drawable最初是不可见的 - 当我点击它时,它会将状态更改为state_pressed
(正确地输入淡出持续时间)当我释放它时,它会回到正常的可见未选择状态。
我必须遗漏一些明显的东西,或者这是某种错误?
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:enterFadeDuration="150" android:exitFadeDuration="150">
<item android:drawable="@drawable/filters_toggle_icon_selected" android:state_focused="true"/>
<item android:drawable="@drawable/filters_toggle_icon_selected" android:state_pressed="true"/>
<item android:drawable="@drawable/filters_toggle_icon" android:state_focused="false" android:state_pressed="false"/>
</selector>
答案 0 :(得分:5)
我有一个类似的问题,我的代码看起来像这样:
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:enterFadeDuration="@android:integer/config_mediumAnimTime"
android:exitFadeDuration="@android:integer/config_mediumAnimTime" >
<item android:state_pressed="true" android:drawable="@color/pressed" />
<item android:drawable="@color/default" />
</selector>
起初,我发现了一个提示,要求摆脱enterFadeDuration
并仅使用exitFadeDuration
。这解决了初始隐形问题,但在第一次交互过程中,视图仍然逐渐变为隐形。
然后,我修改我的结构如下:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/default" />
<item>
<selector android:enterFadeDuration="@android:integer/config_mediumAnimTime"
android:exitFadeDuration="@android:integer/config_mediumAnimTime" >
<item android:state_pressed="true" android:drawable="@color/pressed" />
</selector>
</item>
</layer-list>
基本上,我只是将默认的drawable推出选择器。这是一种解决方法,它也适用于具有多种状态的选择器,但有一些值得注意的限制:
可能不适用于原始问题,但要克服选择器的这种行为需要考虑。
答案 1 :(得分:3)
使用Regex regex = new Regex("(?=" + startTag + ")[A-Za-z0-9\-]+(?<=" + endTag + ")");
和android:enterFadeDuration="@android:integer/config_mediumAnimTime"
。
答案 2 :(得分:-1)
这似乎是在特定Android版本上发生的错误。您可以使用Java代码以编程方式关闭android:enterFadeDuration
,方法是使用Selector访问StateListDrawable:
// Disable android:enterFadeDuration/exitFadeDuration on Android 4.2 only
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.JELLY_BEAN_MR1) {
StateListDrawable stateListDrawable =
(StateListDrawable) animatedButton.getBackground();
stateListDrawable.setEnterFadeDuration(0);
stateListDrawable.setExitFadeDuration(0);
}