Android ProgressBar UI自定义布局

我试图自定义一个状态栏,所以它会看起来像这个图像: 在这里输入图像描述

然而,好几个小时后,我只有一个状态栏,只有我需要的背景(图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的注释 在这里输入图像描述 那么我有一些难看的东西,因为没有angular落。 在这里输入图像描述

我从代码中添加背景,如下所示:

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

我试图添加angular落的形象,但没有运气。 有没有人知道我在这里做错了什么? 或者我错过了什么? 另外,你有什么想法,我怎么可以添加左,右环? 资源: 在这里输入图像描述

解决scheme (感觉怪怪的回答你自己):首先,一个问题是,可绘制的进度有不同的大小比背景(愚蠢的我!)。 此外,为了进展drawable需要一个剪辑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> 

多谢你们!

首先创build一个新的可绘制的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"

你可以使用一个ImageView控件来绘制一个FrameLayout,并将其alpha值设置为一个较低的值。 然后在同一个FrameLayout中用ClipDrawable创build一个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>