在设计布局中创建多个圆圈并以编程方式在其上添加小圆圈?

Create Multiple circle in Design Layout and add small circle on it by programmatically?

您好,我正在尝试创建一个在屏幕中央有多个圆圈的布局。然后以编程方式在其上添加小圆圈。

正在创建这样的布局

下面是我尝试实现这些但没有成功的代码。

圈XML码

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

    <item android:top="8px">
        <layer-list>
            <item>
                <shape android:shape="oval">
                    <solid android:color="#c2c2c2" />
                    <padding
                        android:bottom="6px"
                        android:left="6px"
                        android:right="6px"
                        android:top="6px" />
                </shape>
            </item>
            <item>
                <shape android:shape="oval">
                    <solid android:color="#e3e3e3" />
                    <padding
                        android:bottom="4px"
                        android:left="4px"
                        android:right="4px"
                        android:top="4px" />
                </shape>
            </item>
            <item>
                <shape android:shape="oval">
                    <solid android:color="#d1d1d1" />
                    <padding
                        android:bottom="3px"
                        android:left="3px"
                        android:right="3px"
                        android:top="3px" />
                </shape>
            </item>
            <item>
                <shape android:shape="oval">
                    <solid android:color="#e2e2e2" />
                    <padding
                        android:bottom="2px"
                        android:left="2px"
                        android:right="2px"
                        android:top="2px" />
                </shape>
            </item>
            <item>
                <shape android:shape="oval">
                    <solid android:color="#a2a2a2" />
                    <padding
                        android:bottom="1px"
                        android:left="1px"
                        android:right="1px"
                        android:top="1px" />
                </shape>
            </item>
        </layer-list>
    </item>
</layer-list>

布局代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_centerInParent="true"
    android:background="@drawable/circle"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="Circle1"/>

</LinearLayout>

我的布局图片像这样

如何创建这样的布局。给我一些提示来实现这样的布局。

在此先致谢

我创建了自定义视图。你可以从中得到帮助

attrs.xml

 <?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="CustomLineDotsView">
    <attr name="viewColor" format="color" />
    <attr name="paddingPercentage" format="float"/>
    <attr name="circleRadius" format="integer"></attr>
</declare-styleable>

自定义视图class

   public class CustomLineDotsView extends View {

private int viewColor,circleRadius;
float paddingPercentage;
Paint viewPaint;

public CustomLineDotsView(Context context,AttributeSet attrs) {
    super(context);

    viewPaint = new Paint();
    //get the attributes specified in attrs.xml using the name we included
    TypedArray a = context.getTheme().obtainStyledAttributes(attrs,
            R.styleable.CustomLineDotsView, 0, 0);
    try {
        //get the text and colors specified using the names in attrs.xml
        viewColor = a.getInteger(R.styleable.CustomLineDotsView_viewColor, 0);
           paddingPercentage =       a.getFloat(R.styleable.CustomLineDotsView_paddingPercentage, 0);//0 is default
        circleRadius = a.getInteger(R.styleable.CustomLineDotsView_circleRadius, 0);

    } finally {
        a.recycle();
    }


}


@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    int measuredWidth = getMeasuredWidth();
    int measuredHeight = getMeasuredHeight();

    viewPaint.setColor(viewColor);
    viewPaint.setStyle(Paint.Style.FILL);


    canvas.drawCircle(((measuredWidth * paddingPercentage) / 100), measuredHeight / 2, circleRadius, viewPaint);
    canvas.drawCircle((measuredWidth - ((measuredWidth * paddingPercentage) / 100)), measuredHeight / 2, circleRadius,viewPaint);

    canvas.drawLine(
            ((measuredWidth * paddingPercentage) / 100),
            (measuredHeight / 2),
            (measuredWidth - ((measuredWidth * paddingPercentage) / 100)), (measuredHeight/2),viewPaint);

}


}

如何在布局中使用此视图

                <yourpackagename.CustomLineDotsView
                android:layout_width="match_parent"
                android:layout_height="24dp"
                card_view:circleRadius="8"
                card_view:paddingPercentage="20"
                card_view:viewColor="@color/login_background" />

点击此链接供您参考

http://developer.android.com/guide/topics/ui/custom-components.html http://www.vogella.com/tutorials/AndroidCustomViews/article.html http://code.tutsplus.com/tutorials/android-sdk-creating-custom-views--mobile-14548

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

    <TextView
        android:layout_width="400dp"
        android:layout_height="400dp"
        android:background="@drawable/circle"
        android:gravity="center"
        android:layout_centerInParent="true"
        android:textColor="#FFFFFF"
        android:textSize="10dp" />
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

    <TextView
        android:id="@+id/large_volume"
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:background="@drawable/yellow_circle"
        android:gravity="center"
        android:layout_centerInParent="true"
        android:textColor="#FFFFFF"
        android:textSize="10dp" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <TextView
            android:id="@+id/medium_volume"
            android:layout_width="200dp"
            android:layout_height="200dp"
            android:background="@drawable/green_circle"
            android:gravity="center"
            android:layout_centerInParent="true"
            android:textColor="#FFFFFF"
            android:textSize="10dp" />


    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <TextView
            android:id="@+id/small_volume"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:background="@drawable/circle"
            android:gravity="center"
            android:layout_centerInParent="true"
            android:textColor="#FFFFFF"
            android:textSize="10dp" />
        <RelativeLayout
            android:id="@+id/small_circle"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >

        </RelativeLayout>
    </RelativeLayout>

    </RelativeLayout>
    </RelativeLayout>
    </RelativeLayout>
</LinearLayout>