半圆形进度条Android - 绘制半圆形

时间:2015-01-06 10:31:38

标签: android progress-bar android-canvas android-custom-view

我使用此devadvance\circularSeekBar创建了一个半圆形进度条 当我从调色板中选择自定义视图时,它看起来像这样。

progress bar in palette

在这里我有两个相对布局与权重。包含进度条的布局的权重为2,底部的布局权重为3.并且进度条的布局宽度和高度设置为包装内容。

所以我的问题是为什么从调色板中选择时进度条看起来像这样?帆布尺寸是否适合完美的正方形?我想要的是半圆形进度条完全被这样的布局所包围。

expected

对此表示赞赏。

编辑 xml代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main_parent_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:fitsSystemWindows="true">

    <include layout="@layout/toolbar"/>

    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="3">

        <LinearLayout
            android:id="@+id/content_frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <RelativeLayout xmlns:app = "http://schemas.android.com/apk/res-auto"
                android:id ="@+id/calorie_frame"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="2"
                android:clickable="true">
                <com.devadvance.circularseekbar.CircularSeekBar
                    android:id="@+id/calorie_progressbar"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    app:start_angle = "180"
                    app:end_angle = "0"
                    app:progress = "25"
                    app:circle_x_radius="200"
                    app:circle_y_radius="200"
                    app:circle_stroke_width = "30"
                    app:use_custom_radii="true"
                    app:circle_color ="#FFFACD"

                    android:layout_alignParentEnd="false"
                    android:layout_alignParentStart="false"
                    android:layout_centerInParent="true" />
                </RelativeLayout>

            <RelativeLayout
                android:id="@+id/exercise_frame"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="3"
                android:clickable="true">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceMedium"
                    android:text="@string/calorie_label"
                    android:id="@+id/textView"
                    android:layout_marginBottom="40dp"
                    android:layout_alignParentBottom="true"
                    android:layout_alignParentRight="true"
                    android:layout_alignParentEnd="true"
                    android:layout_marginRight="20dp" />

                <ImageView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:id="@+id/imageView"
                    android:layout_alignBottom="@+id/textView"
                    android:layout_alignParentLeft="true"
                    android:layout_alignParentStart="true"
                    android:layout_marginLeft="50dp"
                    android:layout_marginStart="50dp"
                    android:contentDescription="@string/exercise_image" />

            </RelativeLayout>
        </LinearLayout>

        <ListView
            android:id="@+id/left_drawer"
            android:layout_width="240dp"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:choiceMode="singleChoice"
            android:divider="@android:color/transparent"
            android:dividerHeight="0dp"
            android:background="#999"/>
    </android.support.v4.widget.DrawerLayout>

</LinearLayout>

4 个答案:

答案 0 :(得分:0)

添加此

android:layout_height="0dp"

这是

的内容
android:layout_height="match_parent" 

为您添加重量属性的相对布局。

代表

android:id="@+id/exercise_frame"   
android:id ="@+id/calorie_frame"

ids更改 height =“0dp”

希望它有效......

答案 1 :(得分:0)

我仍然没有找到原因如图所示,但我的猜测是它应该像那样工作。无论如何,我用它替换了它 lzyzsd/CircleProgress它对我的用例非常有用。

可以在android-arsenal

找到类似的精彩内容

答案 2 :(得分:0)

我知道已经晚了,但对于仍然面临将方形区域分配给弧形进度条的问题的任何人。然后看一下这段代码:

https://www.py4u.net/discuss/618437

查看答案 4

答案 3 :(得分:-1)

问题是你拥有的帆布高度。您有一个圆的高度,并在其上绘制一半圆。  试试这个:https://github.com/natasam/DemoProgressViewsLibApp 它满足您的需求,您可以轻松自定义 ArcProgressBar 以满足您的需求。高度是弧的高度,不像你的圆圈那样。您还可以根据需要设置填充,边距,宽度。