具有左右轨道图像的Android自定义ProgressBar

时间:2012-10-23 22:15:37

标签: android android-progressbar

我正在将iOS应用程序移植到Android,iOS应用程序中的一个功能是使用左右轨道图像的自定义UISlider(如下图所示),但到目前为止我似乎无法复制此Android方面的相同行为。

enter image description here

从图像中可以看到,右轨道图像有一个白色图像,然后左轨道图像将是红色或绿色图像(基于人与目标的接近程度)。下面是ProgressBar的XML(顺便说一句,我似乎无法确定ProgressBar或SeekerBar是否是最好的选择,因为没有交互,并且栏显示后它不会改变,因为它更像是一个栏图形类型的图像)

<ProgressBar
            android:id="@+id/MTDMainBar"
            android:indeterminate="true"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:maxHeight="44dip"
            android:minHeight="44dip"
                style="?android:attr/progressBarStyleHorizontal"
                android:max="100"
                android:progress="50"
                android:background="@drawable/whitetrack"
                android:indeterminateDrawable="@drawable/greentrack"/>

但是当我这样做时,绿色轨道图像会填满整个条形图,而不仅仅是条形图的进度侧。我也试过了progressDrawable但得到了相同的结果,所以我有点迷失在接下来要尝试的东西上。有关这种行为的正确设置组合的任何帮助吗?

-----新信息-------------

好吧,所以我现在已经到了中途了,但有一件令我困扰的事情是,ProgressBar似乎没有填充TableRow它的内部,除非我硬编码我知道我不想要的宽度值真的是因为Android设备的屏幕宽度会有所不同。

以下是迄今为止Android显示屏的截图 enter image description here

以下是我一直在使用的代码

//this is the code in the Fragment Class
@Override
public void onActivityCreated (Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);


    Drawable greentrack = getResources().getDrawable(R.drawable.green_progress_clip);
    greentrack.setLevel(35);

    Drawable whitetrack = getResources().getDrawable(R.drawable.white_progress_clip);
    whitetrack.setLevel(100);

    MTDProgressbar = (ProgressBar)getActivity().findViewById(R.id.MTDMainBar);
    MTDProgressbar.setProgressDrawable(greentrack);
    MTDProgressbar.setProgress(35);
    MTDProgressbar.setMax(100);

    MTDBackgroundbar = (ProgressBar)getActivity().findViewById(R.id.MTDBackgroundBar);
    MTDBackgroundbar.setProgressDrawable(whitetrack);
    MTDBackgroundbar.setProgress(100);
    MTDBackgroundbar.setMax(100);
}

这是Progress Bars的XML数据

<TableRow
            android:id="@+id/MTDRow"
            android:layout_width="match_parent"
              android:layout_height="55dip">
        <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" >
        <ProgressBar
                android:id="@+id/MTDBackgroundBar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:maxHeight="44dip"
            android:minHeight="44dip"
            android:paddingLeft="10dip"
            style="?android:attr/progressBarStyleHorizontal" />

        <ProgressBar
            android:id="@+id/MTDMainBar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingLeft="10dip"
            style="?android:attr/progressBarStyleHorizontal"
            android:maxHeight="44dip"
            android:minHeight="44dip"/>

        </RelativeLayout>
              </TableRow>

1 个答案:

答案 0 :(得分:1)

我很确定你不能使用内置的UI元素来做这件事,你必须制作自己的自定义UI元素,可能会扩展ProgressBar。