Прогресс панели поиска Drawable Expand

avatar
Elsunhoty
8 апреля 2018 в 07:26
448
1
3

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

и эта форма, которая появляется в Android Studio

но при запуске на телефоне выглядит так

enter image description here

а вот мой код

в XML

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <SeekBar
            android:id="@+id/seekBar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:max="10000"
            android:progress="500"
            android:progressDrawable="@drawable/custom_seekbar"
            android:thumb="@drawable/thumb_transperent"
            />
    </LinearLayout>

где @drawable/custom_seekbar

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- Define the background properties like color etc -->

    <item android:id="@android:id/background">
        <rotate>
            <layer-list>
                <item android:drawable="@drawable/progress_bar"/>
            </layer-list>
        </rotate>
    </item>

    <!-- Define the progress properties like start color, end color etc -->
    <item android:id="@android:id/progress">
        <clip>
            <layer-list>
                <item android:drawable="@drawable/progressbar_progress"/>
            </layer-list>
            </clip>
    </item>
</layer-list>

и @drawable/progress_bar

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:top="15dp">
        <shape android:shape="line">
            <stroke android:color="@color/black"
                android:width="5dp"/>
            <solid android:color="@android:color/transparent" />
        </shape>
    </item>

    <item
        android:bottom="25dp"
        android:left="0dp"
        android:right="100dp"
        android:gravity="left"

        android:drawable="@drawable/test_small">

    </item>
    <item
        android:left="50dp"
        android:right="50dp"
        android:bottom="25dp"
        android:gravity="center"

        android:drawable="@drawable/test_meduim">

    </item>
    <item
        android:left="100dp"
        android:bottom="25dp"
        android:gravity="right"
        android:drawable="@drawable/test_large">

    </item>
</layer-list>

и progressbar_progress

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:top="15dp">
        <shape android:shape="line">

            <solid android:color="@android:color/transparent" />
            <stroke android:color="@color/red" android:width="3dp"/>
        </shape>
    </item>

    <item
        android:bottom="25dp"
        android:gravity="left"
        android:width="19dp"
        android:height="19dp"
        android:drawable="@drawable/test_small">

    </item>

    <item
        android:gravity="center"
        android:right="12dp"
        android:bottom="25dp"
        android:width="19dp"
        android:height="19dp"
        android:drawable="@drawable/test_meduim">

    </item>
    <item
        android:bottom="25dp"
        android:gravity="right"
        android:width="19dp"
        android:height="19dp"
        android:drawable="@drawable/test_large">

    </item>
</layer-list>

может ли кто-нибудь исправить это или сказать мне, что не так, потому что я пробовал много вещей и не работал и спасибо

Источник

Ответы (1)

avatar
bwt
10 апреля 2018 в 11:01
4

Изображения масштабируются (атрибуты width и height были добавлены в API 23). Чтобы избежать этого, вы можете включить элемент <bitmap/>.

например. заменить :

<item
    android:width="19dp"
    android:height="19dp"
    android:bottom="25dp"
    android:drawable="@drawable/test_small"
    android:gravity="left">

</item>

с :

<item
    android:bottom="25dp">
    <bitmap
        android:gravity="left"
        android:src="@drawable/test_small" />
</item>

Обратите внимание, что атрибут gravity находится в элементе bitmap. Трюк объясняется здесь :

Все рисуемые элементы масштабируются, чтобы соответствовать размеру содержащего View, по умолчанию. Таким образом, размещение ваших изображений в списке слоев на разных позиции могут увеличить размер представления, а некоторые изображения масштабируются как соответствующий. Чтобы избежать масштабирования элементов в списке, используйте <bitmap> элемент внутри элемента, чтобы указать рисуемый и определить придать гравитации что-то, что не масштабируется, например "center".

Elsunhoty
10 апреля 2018 в 12:53
0

это сработало как по волшебству, спасибо, братан. Я сделаю это как правильный ответ