Проблема с производительностью при динамическом изменении фона относительного макета

Я пытаюсь создать экран, на котором я могу выбрать несколько изображений с SDCard и загрузить их в ViewPager & Gridlayout, как в WhatsApp Отправка нескольких изображений (как на снимке экрана ниже).

Снимок экрана приложения

Я могу добиться, как на снимке экрана, используя ViewPager и GridLayout(для ниже представление выбора изображения). когда пользователь смахивает ViewPager мне нужно изменить селектор в GridLayout. Эта часть Selectoion Change также реализована с использованием Relative Layout в качестве Child of GridLayout и обновлением фона RelativeLayout. Ниже приведены эти XMLS

gridlayout_item.xml

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layoutContainer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/on_select"
android:padding="2dp" >

<ImageView
    android:id="@+id/imageone"
    android:layout_width="65dip"
    android:layout_height="65dip"
    android:layout_gravity="center_vertical"
    android:background="@drawable/on_select"
    android:padding="1dip"
    android:scaleType="center" />

</RelativeLayout>

activity_multi_seletion.xml

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@+id/imagepreviewouterlayout" >

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </android.support.v4.view.ViewPager>
</RelativeLayout>

<RelativeLayout
    android:id="@+id/imagepreviewouterlayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_above="@+id/bottom_layout"
    android:layout_marginBottom="10dip"
    android:layout_marginTop="10dip"
    android:background="@android:color/transparent"
    android:padding="5dp" >

    <GridLayout
        android:id="@+id/imagepreviewlayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:columnCount="5"
        android:horizontalSpacing="10dip"
        android:orientation="horizontal"
        android:rowCount="1"
        android:stretchMode="columnWidth"
        android:verticalSpacing="10dip" >

        <RelativeLayout
            android:id="@+id/layoutContainer"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/on_select"
            android:padding="2dp" >

            <ImageView
                android:id="@+id/imageone"
                android:layout_width="65dip"
                android:layout_height="65dip"
                android:layout_gravity="center_vertical"
                android:background="@drawable/on_select"
                android:padding="1dip"
                android:scaleType="center" />
        </RelativeLayout>

        <RelativeLayout
            android:id="@+id/add"
            android:layout_width="65dip"
            android:layout_height="65dip"
            android:background="@drawable/extrabtn_style"
            android:layout_gravity="center" >

            <Button
                android:id="@+id/button1"
                android:layout_width="20dp"
                android:layout_height="20dp"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="true"
                android:background="@drawable/addaccountimg" />

            <RelativeLayout
                android:id="@+id/addmoreimageBtn"
                android:layout_width="406dp"
                android:layout_height="match_parent"
                android:layout_alignParentBottom="true"
                android:layout_alignParentLeft="true"
                android:clickable="true" >
            </RelativeLayout>
        </RelativeLayout>

    </GridLayout>
</RelativeLayout>

<RelativeLayout
    android:id="@+id/bottom_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:background="@drawable/tabbar1" >

    <LinearLayout
        android:id="@+id/bottom_layout1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="1dp"
        android:weightSum="1" >

        <Button
            android:id="@+id/cancelBtn"
            android:layout_width="178dip"
            android:layout_height="50dp"
            android:layout_weight="0.5"
            android:background="@drawable/imageselector_btn"
            android:text="Cancel"
            android:textColor="#E9E9E9" />

        <Button
            android:id="@+id/sendImageBtn"
            android:layout_width="178dip"
            android:layout_height="50dp"
            android:layout_marginLeft="0.5dp"
            android:layout_weight="0.5"
            android:background="@drawable/imageselector_btn"
            android:text="Send"
            android:textColor="#E9E9E9" />
    </LinearLayout>
</RelativeLayout>

</RelativeLayout>

on_select.xml (выборка для рисования)

<?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:drawable="@drawable/box" android:state_selected="true"></item>
<item android:drawable="@drawable/box" android:state_checked="true"></item>
<item android:drawable="@drawable/box" android:state_focused="true"></item>
</selector>

Но я сталкиваюсь с проблемой производительности при изменении фона относительного размера на PageChange ViewPager (onPageSelected). Я имею в виду, что страница ViewPager застряла на некоторое время и движется.

Если я прокомментирую это обновление фона элемента gridlayout на PageChange ViewPager (onPageSelected), его перемещение будет плавным. ниже приведен фрагмент кода.

     @Override
            public void onPageSelected(final int arg0) {

                        if (griditemView!= null)
                            griditemView.setSelected(false);

                        griditemView = imagepreviewgridlayout.getChildAt(arg0);
                        if(griditemView!=null)
                        {
                            griditemView.setSelected(true);
                        }
            }

Пожалуйста, помогите мне решить эту проблему.

0 ответов

Другие вопросы по тегам