我在图库中显示了一系列图像。当用户单击其中一个时,他们会被带到不同的 View 。 我想在用户执行点击时、 View 更改之前向他们提供一些反馈。
我这样定义了一个选择器:
<?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”...
最佳答案
我这里也面临着同样的情况
我找到的唯一解决方案是自己在 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
关于android - 如何在 Android 中拖动图库中的图像时避免选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6580374/