Нарисуйте сложный круг (имеет рамку только на левой половине), используя формы Android
Я пытаюсь нарисовать сложный круг с правой половиной, отличной от второй, используя XML-описание Android.
Последний круг должен иметь границу слева и не иметь границы справа.
Я думал о создании двух разных кругов (один с границей, другой без) и объединить их, но мне не удалось это сделать. Есть идеи?
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>
2 ответа
Я отвечаю на свой вопрос: полукруг со счетчиком, другая половина без.
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 фигуры (ресурсы для рисования), чтобы создать новую, используя для тех, кто использует ее в целях, отличных от индикатора выполнения.