我在画廊中显示了一系列图像。当用户点击其中一个时,他们将被带到不同的视图。 我希望在用户执行点击时,在视图更改之前向用户提供一些反馈。
我定义了一个选择器:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/pic_frame_pressed" />
<item android:drawable="@drawable/pic_frame" /> <!-- default -->
</selector>
这很有效。当用户点击图库中的图像时,会显示一个框架......
但是,当用户使用图像向后拖动图库时,也会显示它。
我查看了我能为选择器找到的不同状态:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:color="hex_color"
android:state_pressed=["true" | "false"]
android:state_focused=["true" | "false"]
android:state_selected=["true" | "false"]
android:state_checkable=["true" | "false"]
android:state_checked=["true" | "false"]
android:state_enabled=["true" | "false"]
android:state_window_focused=["true" | "false"] />
</selector>
我尝试了它们但找不到只在用户点击图像时触发的组合(例如“选中”总是为图库中心的图像触发)
我需要一种“state_clicked”......
答案 0 :(得分:4)
我在这里遇到同样的情况
我找到的唯一解决方案是在OnItemClick事件上处理后台切换(这不是优雅的:/):
mGallery.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View clickedView, int position, long id) {
for(int i = 0; i < parent.getChildCount(); i++){
parent.getChildAt(i).setBackgroundResource(R.drawable.bg_menu);
((TextView) parent.getChildAt(i)).setTextColor(getResources().getColor(R.color.white));
}
clickedView.setBackgroundResource(R.drawable.bg_menu_selected);
((TextView) clickedView).setTextColor(getResources().getColor(R.color.dark_blue));
((SectionAdapter) mGallery.getAdapter()).setSelected(position);
}
});
如您所见,我将所选位置存储在我的适配器上,以便在重绘时显示具有正确布局的项目(失去焦点)
我真的想找到另一个解决方案,但我还没有
如果有人得到它,我会很高兴听到:D