在ImageView上设置图像背景

时间:2014-07-14 03:30:29

标签: android gridview imageview

我的gridView使用imageItem显示本地存储中的图片(Picasso)。通过单击右上角的选择图标选择图像时,图像的状态会发生变化,在选定状态下,图像的蓝色边框如下所示: blue border

我试过这样的事情:

public void onClick(View v) {
            if(!v.isSelected()){
                imageItem.setBackgroundResource(R.drawable.photoborder);
            }else{
                imageItem.setBackgroundDrawable(null);
            }
        }
    });

我确实在没有加载图像时看到了边框。 当毕加索完成加载图像时,边框已被覆盖:

border has been covered

如何在ImageView中设置图像边框? 非常感谢您的任何建议!!

以下是每个图像项的布局:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

       <custome.SquaredImageView
        android:id="@+id/image_item_in_gridview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:src="@drawable/ic_launcher"
        android:background="@drawable/attachment_gallery_images_items_background" />

    <ImageView
        android:id="@+id/imageCheckStatus"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginRight="2dp"
        android:layout_marginTop="2dp"
        android:padding="2dp"
        android:src="@drawable/abc_ic_cab_done_holo_dark" />

</RelativeLayout>

3 个答案:

答案 0 :(得分:3)

您的布局有2个视图; SquaredImageView显示图片,ImageView作为选择指标。当您为SquaredImageView设置背景时,它会被置于SquaredImageView后面(因为它是背景)。

您需要在View前添加SquaredImageView,然后在代码中修改其背景。

在XML布局中添加View

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="right">

    <custome.SquaredImageView
        android:id="@+id/image_item_in_gridview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/ic_launcher"
        android:background="@drawable/attachment_gallery_images_items_background" />

    <View
        android:id="@+id/imageCheckBorder"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/photoborder" />

    <ImageView
        android:id="@+id/imageCheckStatus"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="2dp"
        android:layout_gravity="right"
        android:layout_marginTop="2dp"
        android:padding="2dp"
        android:src="@drawable/abc_ic_cab_done_holo_dark" />

</FrameLayout >

然后修改代码以更改View的背景,而不是SquaredImageView。 (在此示例中,它的名称为imageCheckBorder

public void onClick(View v) {
    if(!v.isSelected()){
        imageCheckBorder.setBackgroundResource(R.drawable.photoborder);
    }else{
        imageCheckBorder.setBackgroundDrawable(null);
    }
}

答案 1 :(得分:0)

您可以将border drawable用作图像视图的图层

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

    <stroke
        android:width="@dimen/drawable_selector_border_thickness"
        android:color="#0099CC" />

    <solid android:color="#500099CC" />

</shape>

答案 2 :(得分:0)

根据您的代码,您同时使用了两个不同的实例,例如imageItem.setBackgroundResource

imageItem.setBackgroundDrawable

您实际需要做的只是坚持使用其中一个背景实例,您就可以获得所需的结果。代码应如下所示

public void onClick(View v) {
        if(!v.isSelected()){
            imageItem.setBackgroundResource(R.drawable.photoborder);
        }else{
            imageItem.setBackgroundResource(null);
        }
    }
});