imageview的圈子背景

时间:2018-06-06 12:33:58

标签: android android-imageview android-drawable android-image android-shape

我正在尝试使用圆形背景放置三个图像视图。我也放了一个圆形的画。

preview

但背景不是圆形显示椭圆形。

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="15dp"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/contactphone"
            android:layout_weight="1"
            android:layout_width="wrap_content"
            android:src="@drawable/phonecall"
            android:layout_margin="10dp"
            android:background="@drawable/contact_icon_round"
            android:layout_height="75dp" />

        <ImageView
            android:id="@+id/contactemail"
            android:layout_weight="1"
            android:layout_width="wrap_content"
            android:src="@drawable/mail"
            android:layout_margin="10dp"
            android:background="@drawable/contact_icon_round"
            android:layout_height="75dp" />

        <ImageView
            android:id="@+id/contactlocation"
            android:layout_weight="1"
            android:layout_width="wrap_content"
            android:src="@drawable/location"
            android:layout_margin="10dp"
            android:background="@drawable/contact_icon_round"
            android:layout_height="75dp" />
            android:layout_gravity="fill_vertical" />
    </LinearLayout>

Round Shape Drawable:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
    <solid android:color="@color/white"/>
    <size android:width="5dp" android:height="5dp"/>
</shape>

有些不对劲但无法弄清错误?

谢谢!

3 个答案:

答案 0 :(得分:1)

只要您的图片来源是完美的正方形,您就可以将所有android:layout_height的{​​{1}}属性更改为Image。 这样您仍然可以使用wrap_content行为。

否则你必须使用固定且相等的宽度和高度并删除重量属性......

答案 1 :(得分:1)

利用这种布局,

Navigation.PushPopupAsync(new SignOutPopup());

由于宽度和高度不均匀,背景显示为椭圆形。

希望它可以帮到你。

答案 2 :(得分:1)

在圆形imageView后面绘制带有2像素黑色边框的黄色圆形背景不使用XML

GradientDrawable gd = new GradientDrawable();
gd.setColor(Color.YELLOW);          // (no gradient)
gd.setStroke(2, Color.BLACK);
gd.setShape(GradientDrawable.OVAL);
gd.setGradientType(GradientDrawable.RADIAL_GRADIENT);
gd.setGradientRadius(iv.getWidth()/2);
iv.setBackground(gd);