Статический процентный бар Android - не индикатор выполнения

Я пытаюсь показать элементы в ListView следующим образом:

    a. Name1
        80.33 ======      60%

    b. Name2
       101.22 =======     70%

    c. Name3
        55.22 ===         30%

    d. Name4
       140.11 ========== 100%

«График» должен быть сплошной цветной линией, но должна быть вся ширина 100%, и он должен занимать всю доступную ширину, за исключением значения в крайнем левом углу и процента в крайнем правом. Кроме того, проценты больше процентилей по отношению к самому низкому значению в наборе!

Во всяком случае, я пробовал FrameLayout с ProgressBar, и это кажется плохо подходящим для этого, плюс я не могу заставить его располагаться так, как я хочу. Я имею в виду цветное изображение в 1 пиксель, которое я растягиваю на процент, который мне нужен, а затем темное изображение в 1 пиксель до конца.

Любые идеи? Спасибо!

РЕДАКТИРОВАТЬ: прогресс в порядке, но новая проблема:

Вот что я сделал в макете:

    <View
        android:id="@+id/pr_bar_1"
        android:layout_width="30dip"
        android:layout_height="4dip"
        android:layout_gravity="center_vertical"
        android:background="#ffffff" />

    <View
        android:id="@+id/pr_bar_2"
        android:layout_width="70dip"
        android:layout_height="4dip"
        android:layout_gravity="center_vertical"
        android:background="#333333" />

Это выглядит именно так, как я хочу! Однако... сейчас я не могу динамически устанавливать ширину. Для класса View нет метода setLayoutWidth(int dip). Если бы я мог получить это, то я был бы сделан. Любые идеи? Спасибо!


person Philippe Le Point    schedule 17.08.2014    source источник
comment
Отредактировано, чтобы включить новое решение... и новую проблему.   -  person Philippe Le Point    schedule 18.08.2014


Ответы (3)


Насколько я понимаю, вам нужно показать темную линию для набранного процента. Позвольте мне исправить, если я ошибаюсь. Для этого вы можете попробовать это: -

Вы можете использовать 2 LinearLayout под 1 горизонтальным родительским элементом LinearLayout. Установите для Weightsum родительского макета значение 100. Первый LinearLayout, который появляется слева, с темным изображением, а второй — со светлым изображением. Затем установите вес левого дочернего элемента в соответствии с процентами и присвойте оставшиеся проценты правому LinearLayout.

Ответ на ваш вопрос редактирования:

LayoutParams     
 params=view_instan.getLayoutParams();
params.width=yourWidth;
view_instan.setLayoutParams(params);
person Rahul    schedule 17.08.2014
comment
Спасибо за предложение! В то же время я нашел решение (выше в РЕДАКТИРОВАТЬ), но, как я описываю сейчас, у меня есть новая проблема: не могу динамически установить layout_width представления, аргх! Спасибо :-) - person Philippe Le Point; 18.08.2014

Если вы хотите что-то нестандартное, напишите свое собственное представление и переопределите onDraw, чтобы делать именно то, что вы хотите.

person Gabe Sechan    schedule 17.08.2014

Использование view.setLayoutParams(params) у меня не сработало, мне пришлось поместить код в исполняемый файл.

XML:

<LinearLayout
    android:id="@+id/ll_parent"
    android:layout_width="match_parent"
    android:layout_height="6dp"
    android:baselineAligned="false"
    android:orientation="horizontal"
    android:background="@color/white"
    android:paddingStart="1dp"
    android:paddingEnd="1dp">

    <LinearLayout
        android:id="@+id/pr_bar_1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:layout_weight="0"
        android:layout_gravity="center_vertical"
        android:background="@color/blue">
    </LinearLayout>

    <LinearLayout
        android:id="@+id/pr_bar_2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:layout_weight="0"
        android:layout_gravity="center_vertical"
        android:background="@color/white">
    </LinearLayout>

</LinearLayout>

Джава:

final int percentage = my_percentage;
llParent.post(new Runnable() {
            @Override
            public void run() {
                int fullWidth = llParent.getWidth();

                prBar2.getLayoutParams().width = Math.round(fullWidth*((1 - ((float) (percentage/100)))));
                prBar2.requestLayout();
                prBar1.getLayoutParams().width = Math.round(fullWidth*((float) (percentage/100)));
                prBar1.requestLayout();
            }
        });
person Tincho825    schedule 07.03.2019