【问题标题】:Semi Circular Progress bar Android - drawing semi circle半圆形进度条 Android - 绘制半圆形
【发布时间】:2015-01-06 10:31:38
【问题描述】:

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

.

在此我有两个带权重的相对布局。包含进度条的布局的权重为2,底部的权重为3。进度条的布局宽度和高度设置为包裹内容。

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

对此的任何说明表示赞赏。

编辑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>

【问题讨论】:

  • 看起来您交换了权重分配(顶部 = 3,底部 = 2)。可能你忘了分配android:layout_height="0dp",这就是权重的工作方式。还要确保根容器是LinearLayout(如果是RelativeLayout,你可以忘记权重)。
  • @DerGolem 根容器是一个线性布局。我用android:layout_height="match_parent"@MSGadag 编辑过。
  • 没有看到你的代码,我无法想象有这么高的布局嵌套级别(适得其反)。所以,只需将root 替换为parent
  • @DerGolem 你能给我推荐一个高布局嵌套的解决方法吗?我是 Android 新手。
  • 至少(我眼前一亮的优化)第一个 relativeLayout 可以安全地删除。然后,您可以通过将图像作为复合可绘制对象添加到 TextView 来进一步优化并删除第二个(也可以删除 ImageView)。将权重移动到 CircularSeekBar 和 TextView。请务必将两者的高度设置为 0dp,否则将不会应用权重

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


【解决方案1】:

添加这个

android:layout_height="0dp"

这个

android:layout_height="match_parent" 

对于你添加 weight 属性的相对布局。

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

ids 改变 height="0dp"

希望它有效...

【讨论】:

  • 不。这没有帮助。
【解决方案2】:

我仍然没有找到如图所示发生的原因,但我的猜测是它应该像那样工作。无论如何,我用这个代替了它 lzyzsd/CircleProgress 对我的用例来说效果很好。

可以在这里找到类似的很棒的东西android-arsenal

【讨论】:

    【解决方案3】:

    问题是您拥有的画布高度。你有一个圆圈的高度,你在上面画了一半的圆圈。 试试这个:https://github.com/natasam/DemoProgressViewsLibApp 它有您所需要的,您可以根据自己的需要轻松自定义 ArcProgressBar。而且高度是弧高,不是像你这样的整圆。您还可以根据需要设置内边距、边距、宽度。

    【讨论】:

    • 比我用的更好!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-19
    • 1970-01-01
    相关资源
    最近更新 更多