如果我将 ImageView 设置为既可点击又可聚焦,它可以工作,但我无法判断哪个图像是聚焦的。让它在视图周围绘制橙色边框以便用户知道它当前处于焦点的最佳方法是什么?
我尝试将其放入 LinearLayout 并将其设置为可聚焦和可点击,但没有任何运气。即使我在它上面加了边距,也没有任何迹象表明它被选中了。
您可以使用带有选择器的可绘制对象作为背景。
例如,我在 res/drawable 中有 gallery_image_bg.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:constantSize="true">
<item android:state_selected="true">
<shape android:shape="rectangle">
<solid android:color="#E6E4E0"/>
<stroke android:width="3dp" android:color="#F9C11E"/>
<padding android:left="3dp"
android:top="3dp"
android:right="3dp"
android:bottom="3dp" />
</shape>
</item>
<item android:state_pressed="true">
<shape android:shape="rectangle">
<solid android:color="#E6E4E0"/>
<stroke android:width="3dp" android:color="#F9C11E"/>
<padding android:left="3dp"
android:top="3dp"
android:right="3dp"
android:bottom="3dp" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="#E6E4E0"/>
<stroke android:width="3dp" android:color="#FFF"/>
<padding android:left="3dp"
android:top="3dp"
android:right="3dp"
android:bottom="3dp" />
</shape>
</item>
</selector>
这会在图像周围创建三个不同颜色的 3dp 线。它们是可见的,因为填充迫使图像在稍小的区域内渲染。
在这样的代码中使用:
image.setBackgroundResource(R.drawable.gallery_image_bg)
快速的解决方案是使用一个监听器,它会响应点击,并在 imageView 上设置一个橙色边框...
imageView.setOnClickListener(listener)
但是您必须对所有 ImageView 项目执行此操作。至少他们可以共享同一个监听器。
长期的解决方案是实现自己的View,扩展ImageView,它会绘制自己的橙色边框以响应点击。
我假设您希望它像单选按钮一样工作,单击 ImageView 将删除先前选择的 ImageView 的边框?因此,您将需要共享侦听器来维护对当前选定 ImageView 的引用,然后可以在单击新 ImageView 时“取消选择”。
迟到的答案,但您也可以使用 LayerDrawable 作为图像源。这样你就不必搞乱背景、填充等。
LayerDrawable d = new LayerDrawable(new Drawable[]{new BitmapDrawable(myBmp), getResources().getDrawable(R.drawable.my_selector_list)});
imageView.setImageDrawable(d);