我还没找到解决方案。
我有一个静音/取消静音按钮。我把它设置为ImageButton,src和background都是选择器drawables。
我正在展示 - 选择按钮时的“静音”图标 - 未选择按钮时的“静音”图标
单击按钮时,我想在几分之一秒内显示黄色背景 但我经历的是: 仅当未选择按钮时出现黄色背景(通过单击)(isSelected = false),并且在选择按钮时不显示(isSelected = false)
我不明白为什么,但那就是发生了什么!
按下按钮时会出现黄色背景(无论是否选中),但我真正感兴趣的是当你只是点击它而不需要按住它时显示它/ p>
任何解决方案?
view.java
volumemuteImageButton = (ImageButton) findViewById(R.id.volume_mute);
volumemuteImageButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
volumemuteImageButton.setSelected(!volumemuteImageButton.isSelected());
}
});
layout.xml
<ImageButton
android:id="@+id/volume_mute"
android:layout_width="58dp"
android:layout_height="fill_parent"
android:src="@drawable/img_selector"
android:background="@drawable/bg_selector" />
img_selector.png
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/sdmp_ic_muted_pressed"
android:state_selected="true" android:state_pressed="true" />
<item android:drawable="@drawable/sdmp_ic_muted_pressed"
android:state_selected="true" android:state_focused="true" />
<item android:drawable="@drawable/sdmp_ic_muted_default"
android:state_selected="true" />
<item android:drawable="@drawable/sdmp_ic_mute_pressed"
android:state_selected="false" android:state_pressed="true" />
<item android:drawable="@drawable/sdmp_ic_mute_pressed"
android:state_selected="false" android:state_focused="true" />
<item android:drawable="@drawable/sdmp_ic_mute_default"
android:state_selected="false" />
</selector>
bg_selector.png
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/sdmp_color_yellow"
android:state_pressed="true" />
<item android:drawable="@drawable/sdmp_color_yellow"
android:state_focused="true" />
</selector>
答案 0 :(得分:7)
我解决了它!!!!!
我不知道为什么,但使用onTouch
ACTION_DOWN
会这样做,而使用onClick
state_pressed
仅在selected=false
传递时被触发1}}到selected=true
以前是怎么回事:
volumemuteImageButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
setVolumeMute(!volumemuteImageButton.isSelected());
}
});
现在怎么样:
volumemuteImageButton.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction()==MotionEvent.ACTION_DOWN) {
setVolumeMute(!volumemuteImageButton.isSelected());
}
return false;
}
});