Android 如何创建具有多个图像的圆形视图

Android 如何创建具有多个图像的圆形视图,android,android-layout,imageview,android-imageview,Android,Android Layout,Imageview,Android Imageview,如何创建一个可以包含多个图像和圆形边框的视图?以下是一些最终产品的样品 图像将从url下载,如示例所示,视图中可能包含一到四个图像 有几个很好的库可用于创建圆形图像。但事先你会想把多个图像组合成一个长方形,然后可以做成圆形 我会选择其中一个。不同之处在于它们的名称所描述的位置CircleImageView将为您提供一个完美的圆形图像圆角图像视图实际上可以提供矩形、椭圆形或圆形的圆角 如果你想让你的应用程序轻量级,避免使用外部LIBs,你也可以创建一个圆形图像,中间有一个透明圆圈,它可以被覆盖

如何创建一个可以包含多个图像和圆形边框的视图?以下是一些最终产品的样品


图像将从url下载,如示例所示,视图中可能包含一到四个图像

有几个很好的库可用于创建圆形图像。但事先你会想把多个图像组合成一个长方形,然后可以做成圆形

我会选择其中一个。不同之处在于它们的名称所描述的位置
CircleImageView
将为您提供一个完美的圆形图像<代码>圆角图像视图实际上可以提供矩形、椭圆形或圆形的圆角


如果你想让你的应用程序轻量级,避免使用外部LIBs,你也可以创建一个圆形图像,中间有一个透明圆圈,它可以被覆盖在源图像顶部的背景图像上,使用常规的代码> IVIEVIEW 。

< P>另一个选项是创建自定义<代码>线性布局它包含xml格式的四个
imageview
,可以使用权重动态重新组织显示的
imageview
数量

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

    <LinearLayout
        android:id="@+id/left_container"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_width="50dp"
        android:layout_height="100dp"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/top_left_image"
            android:layout_width="50dp"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:background="#111" />


        <ImageView
            android:id="@+id/bottom_left_image"
            android:layout_width="50dp"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:background="#333" />

    </LinearLayout>

    <LinearLayout
        android:id="@+id/right_container"
        android:layout_width="50dp"
        android:layout_height="100dp"
        android:layout_toRightOf="@+id/left_container"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/top_right_image"
            android:layout_width="50dp"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:background="#555" />


        <ImageView
            android:id="@+id/bottom_right_image"
            android:layout_width="50dp"
            android:layout_height="0dp"
            android:layout_weight="0"
            android:background="#777" />

    </LinearLayout>

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent" 
        android:background="@color/transparent_circle_image"/>

</RelativeLayout>

您提到您正在从URL加载图像,因此如果使用这种方法,您将能够使用类似于库的方法来加载图像,并且您不必担心在绘制圆形图像之前等待所有图像下载。如果这样做,每个图像都可以独立于其他图像加载

唯一的缺点是,您必须使用具有透明圆形背景的图像来创建圆形图像的外观。您可以创建一个可使用的常规绘图。或者你可以试着把它画在画布上。这是一个很好的解决方案,可以创建一个绘制透明圆的自定义视图

如果要使用自定义视图,只需替换

<ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent" 
        android:background="@color/transparent_circle_image"/>



使用自定义的
可绘制的
在其
绘制中绘制4或2个
位图
smethod@pskink我该怎么做呢?你能给我指一些指南吗?谢谢是的,请参阅android.support.v4.graphics.drawable.RoundedBitmapDrawable的源代码。唯一的问题是我是从网上获得这些图像的,所以我不确定在drawable的onDraw方法之前预加载它们有多容易这就是
drawable#invalidateSelf
的目的,下载图像并准备好
Canvas#drawBitmap
时调用它。我可以在CircleImageView库中放置多个图像吗?似乎没有人支持这一点yet@AnkitGoyal不要使用任何外部lib:只需看看在android.support.v4.graphics.drawable.RoundedBitmapDrawable中是如何完成的就可以了。刚刚编辑了我的答案,您需要先将图像组合成一个矩形。然后用其中一个LIB。@DavidArgyleThacker真棒-谢谢。我是否应该像这篇文章那样组合位图:我并不擅长在AnkitGoyal绘制位图,但这看起来是一个很好的起点。喜欢它!最后一个问题-我应该如何最有效地创建具有透明圆形背景的图像?我刚刚更新了我的答案,并添加了一个指向另一个问题的链接,该问题实现了透明圆形的自定义视图。要么使用它,要么只是创建一个常规图像来使用。没问题,祝你好运!
<com.app.view.TransparentCircle
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>