使用 Android 形状绘制一个复杂的圆(仅在其左半边有边框)

Draw a complex circle (Has border only on the left half of it) using Android Shapes

我正在尝试使用 Android 的 XML 描述绘制一个右半边与第二个不同的复杂圆。

最后一个圆应该左边有边框,右边没有边框。

我想创建两个不同的圆圈(一个有边框,另一个没有)并将它们合并,但我没有成功。 有什么想法吗?

first_circle.xml

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

second_circle.xml

<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="oval" xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@android:color/black"/>
    <stroke android:width="6dp" android:color="@color/lectra_black" />
</shape>

final_circle.xml

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:top="0dp" android:left="0dp" android:bottom="0dp" android:right="0dp" android:drawable="@drawable/first_circle">
    </item>
    <item android:top="0dp" android:left="0dp" android:bottom="0dp" android:right="0dp" android:drawable="@drawable/second_circle">
    </item>
</layer-list>

我在回答我的问题:半圈有计数器,另一半没有。

drawable 包含 circle_grey.xml、counter_black.xml、counter_black_clip.xml.

布局包含activity_main.xml.

circle_grey.xml

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

counter_black.xml

<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="oval" xmlns:android="http://schemas.android.com/apk/res/android">
    <size android:width="80sp" android:height="80dp" />
    <stroke android:width="4dp" android:color="#000000" />
</shape>

counter_black_clip.xml

<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/counter_black"
    android:clipOrientation="horizontal"
    android:gravity="left" />

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:background="@drawable/circle_grey"
        android:orientation="horizontal"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginLeft="10dp">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/layout_half_cercle"
            android:weightSum="7"
            android:background="@drawable/counter_black_clip"
            android:orientation="horizontal"/>

    </LinearLayout>
</RelativeLayout>

activity_main.java

package app.test.com.myapplication;

import android.graphics.drawable.ClipDrawable;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.widget.LinearLayout;

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        LinearLayout layoutDate = (LinearLayout) findViewById(R.id.layout_half_cercle);
        ClipDrawable drawable = (ClipDrawable) layoutDate.getBackground();
        drawable.setLevel(drawable.getLevel() + 5000);
    }
}

非常感谢。这是如何简单地实现 ClipDrawable 的最佳示例 - 使用 2 个形状(可绘制资源)创建一个新形状,供那些将其用于进度条以外目的的人使用。