如果我将图像视图设置为可单击且可集中的,它可以正常工作,但是我无法判断哪个图像是专注的。如何使其在视图周围绘制橙色边框的最佳方法是什么?

我尝试将其放在线上层上,并设置为可集中的和可单击的,但没有任何运气。即使我在上面贴上边距,也没有什么可指示它已被选中的。

有帮助吗?

解决方案

您可以将带有选择器的可绘图用作背景。

例如,我在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,该图像响应单击而绘制自己的橙色边框。

我假设您希望它像无线电按钮一样工作,单击imageView会从先前选择的ImageView中删除边框?因此,您将需要共享的侦听器来维护对当前选择的ImageView的引用,然后在单击新的ImageView时可以“删除”。

延迟答案,但您也可以将图层用于图像源。然后,您不必弄乱背景,填充等。

LayerDrawable d = new LayerDrawable(new Drawable[]{new BitmapDrawable(myBmp), getResources().getDrawable(R.drawable.my_selector_list)});
imageView.setImageDrawable(d);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top