Android静态百分比栏视图 - 不是进度条

问题描述 投票:2回答:3

我正试图在ListView中显示项目,如下所示:

    a. Name1
        80.33 ======      60%

    b. Name2
       101.22 =======     70%

    c. Name3
        55.22 ===         30%

    d. Name4
       140.11 ========== 100%

“图形”应该是纯色线,但100%的整个宽度需要在那里,它应该占据可用的整个宽度,除了最左边的值和最右边的百分比。此外,相对于集合中的最低值,百分比是更高的百分位数!

无论如何,我已经尝试使用ProgressBar的FrameLayout,这似乎不适合这个加上我无法按照我想要的方式进行布局。我正在考虑一张1px的彩色图像,我将所需的百分比拉伸,然后在剩下的时间内拉伸1px的暗图像。

有任何想法吗?谢谢!

编辑:好的进展,但一个新的问题:

这是我在布局中所做的:

    <View
        android:id="@+id/pr_bar_1"
        android:layout_width="30dip"
        android:layout_height="4dip"
        android:layout_gravity="center_vertical"
        android:background="#ffffff" />

    <View
        android:id="@+id/pr_bar_2"
        android:layout_width="70dip"
        android:layout_height="4dip"
        android:layout_gravity="center_vertical"
        android:background="#333333" />

这看起来完全像我想要的!但是......我似乎无法动态设置宽度。 View类没有setLayoutWidth(int dip)方法。如果我能得到那个,那我就完成了。有任何想法吗?谢谢!

android listview android-framelayout
3个回答
1
投票

据我了解,你需要显示暗线的得分百分比。如果我错了,请纠正。为此你可以尝试这个: -

您可以在1个水平LinearLayout Parent下使用2 LinearLayout。将父布局的权重设置为100.第一个LinearLayout左边是暗图像,第二个是光图像。然后根据百分比设置左子的权重,并将剩余的百分比给予正确的LinearLayout

回答您的编辑问题:

LayoutParams     
 params=view_instan.getLayoutParams();
params.width=yourWidth;
view_instan.setLayoutParams(params);

0
投票

如果你想要一些自定义的东西,你可以编写自己的视图并覆盖onDraw以完全按照自己的意愿行事。


0
投票

使用view.setLayoutParams(params)对我来说不起作用,我不得不把代码放在runnable中。

XML:

<LinearLayout
    android:id="@+id/ll_parent"
    android:layout_width="match_parent"
    android:layout_height="6dp"
    android:baselineAligned="false"
    android:orientation="horizontal"
    android:background="@color/white"
    android:paddingStart="1dp"
    android:paddingEnd="1dp">

    <LinearLayout
        android:id="@+id/pr_bar_1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:layout_weight="0"
        android:layout_gravity="center_vertical"
        android:background="@color/blue">
    </LinearLayout>

    <LinearLayout
        android:id="@+id/pr_bar_2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:layout_weight="0"
        android:layout_gravity="center_vertical"
        android:background="@color/white">
    </LinearLayout>

</LinearLayout>

Java的:

final int percentage = my_percentage;
llParent.post(new Runnable() {
            @Override
            public void run() {
                int fullWidth = llParent.getWidth();

                prBar2.getLayoutParams().width = Math.round(fullWidth*((1 - ((float) (percentage/100)))));
                prBar2.requestLayout();
                prBar1.getLayoutParams().width = Math.round(fullWidth*((float) (percentage/100)));
                prBar1.requestLayout();
            }
        });
© www.soinside.com 2019 - 2024. All rights reserved.