Подтвердить что ты не робот

Пользовательский макет пользовательского интерфейса Android ProgressBar

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

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

В текущем коде есть: xml layout:

<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>

Прогресс_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

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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