Answers:
我将以下xml设置为“图像视图”的背景为“可绘制”。有用。
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF" />
<stroke android:width="1dp" android:color="#000000" />
<padding android:left="1dp" android:top="1dp" android:right="1dp"
android:bottom="1dp" />
</shape>
然后添加android:background="@drawable/yourXmlFileName"
到您的ImageView
android:background="@drawable/yourXmlFileName"
到ImageView
以下是我以前具有黑色边框的代码。请注意,我没有使用额外的xml文件作为边框。
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/red_minus_icon"
android:background="#000000"
android:padding="1dp"/>
android:scaleType="centerCrop"
。
scaleType="centerCrop"
,请确保还要添加cropToPadding="true"
我知道这是一篇旧文章,但我认为这可能会帮助某个人。
如果要模拟不与形状的“纯色”重叠的半透明边框,请在xml中使用它。请注意,我这里根本不使用“笔画”标记,因为它似乎总是与实际绘制的形状重叠。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape android:shape="rectangle" >
<solid android:color="#55111111" />
<padding
android:bottom="10dp"
android:left="10dp"
android:right="10dp"
android:top="10dp" />
<corners android:radius="5dp" />
</shape>
</item>
<item>
<shape android:shape="rectangle" >
<padding
android:bottom="5dp"
android:left="5dp"
android:right="5dp"
android:top="5dp" />
<solid android:color="#ff252525" />
</shape>
</item>
</layer-list>
ImageView
在xml文件中
<ImageView
android:id="@+id/myImage"
android:layout_width="100dp"
android:layout_height="100dp"
android:padding="1dp"
android:scaleType="centerCrop"
android:cropToPadding="true"
android:background="@drawable/border_image"
android:src="@drawable/ic_launcher" />
保存以下代码,名称为border_image.xml
,并且应位于可绘制文件夹中
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="270"
android:endColor="#ffffff"
android:startColor="#ffffff" />
<corners android:radius="0dp" />
<stroke
android:width="0.7dp"
android:color="#b4b4b4" />
</shape>
如果您想给图像的边框加上圆角,则可以在border.xml文件中更改一行
<corners android:radius="4dp" />
在可绘制文件夹中创建具有以下内容的xml文件(例如“ frame_image_view.xml”):
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke
android:width="@dimen/borderThickness"
android:color="@color/borderColor" />
<padding
android:bottom="@dimen/borderThickness"
android:left="@dimen/borderThickness"
android:right="@dimen/borderThickness"
android:top="@dimen/borderThickness" />
<corners android:radius="1dp" /> <!-- remove line to get sharp corners -->
</shape>
更换@dimen/borderThickness
和@color/borderColor
任何你想要的或添加相应扪/彩色。
将Drawable作为背景添加到您的ImageView中:
<ImageView
android:id="@+id/my_image_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/frame_image_view"
android:cropToPadding="true"
android:adjustViewBounds="true"
android:scaleType="fitCenter" />
您必须使用android:cropToPadding="true"
,否则定义的填充无效。或者android:padding="@dimen/borderThickness"
在您的ImageView中使用以实现相同目的。如果边框框住了父母而不是您的ImageView,请尝试使用android:adjustViewBounds="true"
。
在代码中更改边框颜色的最简单方法是使用tintBackgound属性。
ImageView img = findViewById(R.id.my_image_view);
img.setBackgroundTintList(ColorStateList.valueOf(Color.RED); // changes border color to red
要么
ImageView img = findViewById(R.id.my_image_view);
img.setBackgroundTintList(getColorStateList(R.color.newColor));
别忘了定义您的newColor
。
添加像res / drawables / background.xml这样的背景Drawable:
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@android:color/white" />
<stroke android:width="1dp" android:color="@android:color/black" />
</shape>
在res / layout / foo.xml中更新ImageView背景:
...
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="1dp"
android:background="@drawable/background"
android:src="@drawable/bar" />
...
如果希望src在背景上绘制,请排除ImageView填充。
上面已经使用过,但没有专门提及。
setCropToPadding(boolean);
如果为true,则图像将被裁剪以适合其填充。
这将使ImageView
源适合填充到添加到其背景的填充中。
通过XML可以按以下方式完成-
android:cropToPadding="true"
您必须在res / drawable此代码中创建background.xml
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF" />
<corners android:radius="6dp" />
<stroke
android:width="6dp"
android:color="@android:color/white" />
<padding
android:bottom="6dp"
android:left="6dp"
android:right="6dp"
android:top="6dp" />
</shape>
对于那些正在搜索ImageView的自定义边框和形状的用户。您可以使用android-shape-imageview
只需添加compile 'com.github.siyamed:android-shape-imageview:0.9.+@aar'
到您的中即可build.gradle
。
并在您的布局中使用。
<com.github.siyamed.shapeimageview.BubbleImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/neo"
app:siArrowPosition="right"
app:siSquare="true"/>
我几乎放弃了。
这是我使用滑行加载图像的条件,请参见此处有关圆角变换的详细滑行问题以及此处的信息
我的属性也相同ImageView
,每个人在这里1,这里2和这里3回答
android:cropToPadding="true"
android:adjustViewBounds="true"
android:scaleType="fitCenter"`
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/path_to_rounded_drawable"
但是仍然没有成功。
经过一段时间的研究后,在此处使用此SO答案中的foreground
属性给出结果android:foreground="@drawable/all_round_border_white"
不幸的是,它给了我“不好的”边框角,如下图所示:
以下是解决此冗长麻烦的最简单的解决方案。
<FrameLayout
android:layout_width="112dp"
android:layout_height="112dp"
android:layout_marginLeft="16dp" <!-- May vary according to your needs -->
android:layout_marginRight="16dp" <!-- May vary according to your needs -->
android:layout_centerVertical="true">
<!-- following imageView acts as the boarder which sitting in the background of our main container ImageView -->
<ImageView
android:layout_width="112dp"
android:layout_height="112dp"
android:background="#000"/>
<!-- following imageView holds the image as the container to our image -->
<!-- layout_margin defines the width of our boarder, here it's 1dp -->
<ImageView
android:layout_width="110dp"
android:layout_height="110dp"
android:layout_margin="1dp"
android:id="@+id/itemImageThumbnailImgVw"
android:src="@drawable/banana"
android:background="#FFF"/> </FrameLayout>
在下面的答案中,我已经解释得足够好了,请也来看看!
希望对其他人有所帮助!
在相同的xml中,我接下来使用了:
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#ffffff" <!-- border color -->
android:padding="3dp"> <!-- border width -->
<ImageView
android:layout_width="160dp"
android:layout_height="120dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:scaleType="centerCrop" />
</RelativeLayout>