19

我正在尝试自定义状态栏,使其看起来像这样:在此处输入图像描述

然而,几个小时后,我所拥有的只是一个带有我需要的背景的状态栏(图 2):在此处输入图像描述

我拥有的当前代码是:xml布局:

<ProgressBar
                android:id="@+id/pBarOverallStatus"
                style="?android:attr/progressBarStyleHorizontal"
                android:layout_width="0dip"
                android:layout_height="fill_parent"
                android:layout_marginLeft="10dip"
                android:layout_marginRight="10dip"
                android:layout_weight="94"
                android:indeterminateOnly="false"
                android:max="100"
                android:progressDrawable="@drawable/progress_bar_states" >
            </ProgressBar>

progress_bar_states.xml:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <!-- <item android:id="@android:id/progress">
        <bitmap
            android:gravity="center"
            android:src="@drawable/progressbar_progressing" />

        <corners android:radius="10dp" />
    </item>
     -->

</layer-list>

删除评论,proressbar_progressing 看起来像 在此处输入图像描述 然后我有一些丑陋的东西,因为没有角落。在此处输入图像描述

我正在从代码中添加背景,例如:

overallStatus = (ProgressBar) findViewById(R.id.pBarOverallStatus);
Resources res = getResources();
overallStatus.setBackgroundDrawable(res.getDrawable(R.drawable.progressbar_background));
overallStatus.setProgress(50);

我试图为图像添加角落,但没有运气。有人知道我在这里做错了什么吗?或者我错过了什么?另外,您知道如何添加左右环吗?资源: 在此处输入图像描述

4

3 回答 3

29

解决方案(回答你自己的感觉很奇怪):首先,一个问题是进度可绘制的大小与背景不同(愚蠢的我!)。此外,对于可绘制的进度,需要一个剪辑 xml。像progressbar_progress_clip.xml这样的东西:

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

然后,在相对布局中添加进度条和两张图片,这样就可以在状态栏之后绘制图片了。像这样的东西:

<RelativeLayout
                android:id="@+id/relativeLayout1"
                android:layout_width="0dip"
                android:layout_height="fill_parent"
                android:layout_marginLeft="10dip"
                android:layout_marginRight="10dip"
                android:layout_weight="94" >

                <ProgressBar
                    android:id="@+id/pBarOverallStatus"
                    style="?android:attr/progressBarStyleHorizontal"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:layout_marginBottom="2dp"
                    android:layout_marginTop="2dp"
                    android:indeterminateOnly="false"
                    android:max="100"
                    android:progressDrawable="@drawable/progressbar_progress_clip" >
                </ProgressBar>

                <ImageView
                    android:id="@+id/ringLeft"
                    android:layout_width="wrap_content"
                    android:layout_height="fill_parent"
                    android:layout_alignParentLeft="true"
                    android:layout_centerVertical="true"
                    android:layout_marginLeft="7dp"
                    android:contentDescription="@string/status_bar_ring"
                    android:src="@drawable/status_bar_ring" />

                <ImageView
                    android:id="@+id/ringRight"
                    android:layout_width="wrap_content"
                    android:layout_height="fill_parent"
                    android:layout_alignParentRight="true"
                    android:layout_centerVertical="true"
                    android:layout_marginRight="7dp"
                    android:contentDescription="@string/status_bar_ring"
                    android:src="@drawable/status_bar_ring" />
            </RelativeLayout>

多谢你们!

于 2012-11-07T13:44:38.713 回答
0

首先创建一个新的可绘制 XML 文件:

<?xml version="1.0" encoding="UTF-8"?> 
<shape
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 

    <corners
        android:bottomRightRadius="7dp"
        android:bottomLeftRadius="7dp"
        android:topLeftRadius="7dp"
        android:topRightRadius="7dp"/> 

</shape> 

然后在您的布局中,将以下属性添加到您的进度条:

android:background="@drawable/the_file_you_previously_created"

于 2012-03-29T08:58:36.343 回答
0

您可以使用 ImageView 制作一个 FrameLayout 来保存您的可绘制对象,并将其 alpha 值设置为较低的值。然后在同一个 FrameLayout 中创建一个带有 ClipDrawable 的 ProgressBar。并在您的进度更新中设置 ClipDrawable 的值。

代码:

<FrameLayout
        android:layout_gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    <ProgressBar
        android:max="100"
        android:id="@+id/progress_bar"
        android:layout_gravity="center"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:progressDrawable="@drawable/custom_progress_image"
        android:layout_marginRight="5dp" />

        <ImageView
            android:alpha="0.4"
            android:src="@drawable/app_logo"
            android:layout_gravity="center"
            android:layout_width="200dp"
            android:layout_height="200dp" />
</FrameLayout> 
于 2015-09-07T16:54:24.277 回答