Пользовательский макет Android ProgressBar UI - PullRequest
19 голосов
/ 29 марта 2012

Я пытаюсь настроить строку состояния, чтобы она выглядела следующим образом: enter image description here

Тем не менее, после хорошей пары часов все, что у меня есть, это строка состояния с фоном, который мне нужен только (Изображение 2): enter image description here

Текущий код, который у меня есть: 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 выглядит enter image description here тогда у меня что-то уродливое, потому что нет углов. enter image description here

Я добавляю фон из кода, что-то вроде:

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

Я пытался добавить углы к изображению, но безуспешно. Кто-нибудь знает, что я здесь делаю не так? Или чего мне не хватает? Кроме того, у вас есть идея, как я могу добавить левые и правые кольца? Ресурс: enter image description here

Ответы [ 3 ]

29 голосов
/ 07 ноября 2012

Решение (чувствует себя странно, отвечая на свой вопрос): во-первых, одна проблема заключалась в том, что нарисованный прогресс имел размер, отличный от фона (глупо!).Кроме того, для прорисовки прогресса необходим клип 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>

Спасибо, ребята!

0 голосов
/ 07 сентября 2015

Вы можете создать FrameLayout с ImageView, удерживающим ваш объект рисования, и установить его альфа-значение на низкое значение.Затем создайте ProgressBar с ClipDrawable в том же FrameLayout.И установите значение 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> 
0 голосов
/ 29 марта 2012

Сначала создайте новый 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"

...