如果我将我的ImageView设置为可点击和可聚焦,它可以工作,但我无法分辨哪个图像是聚焦的。什么是让它在视图周围绘制橙色边框的最佳方法,以便用户知道它目前处于焦点位置?
我尝试将其放入LinearLayout并将其设置为可聚焦且可点击,但没有任何运气。即使我在上面留有余量,也没有任何迹象表明它已被选中。
答案 0 :(得分:6)
您可以使用带有选择器的drawable作为背景。
例如,我在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)
答案 1 :(得分:0)
快速解决方案是使用一个侦听器,它将响应点击,并在imageView上设置橙色边框......
imageView.setOnClickListener(listener)
但您必须为所有ImageView项目执行此操作。至少他们可以共享同一个听众。
很长的解决方案是实现自己的View,扩展ImageView,它会响应点击而绘制自己的橙色边框。
我假设您希望它像单选按钮一样工作,单击ImageView将从先前选择的ImageView中删除边框?因此,您需要共享侦听器来维护对当前所选ImageView的引用,然后在单击新ImageView时可以“取消选择”。
答案 2 :(得分:0)
延迟回答,但您也可以使用LayerDrawable作为图像源。然后你不必乱搞背景,填充等等。
LayerDrawable d = new LayerDrawable(new Drawable[]{new BitmapDrawable(myBmp), getResources().getDrawable(R.drawable.my_selector_list)});
imageView.setImageDrawable(d);