Установка поля просмотра много раз эффективным способом - PullRequest
0 голосов
/ 14 сентября 2018

Я занимаюсь разработкой приложения для Android, которое содержит фрагмент. Этот фрагмент выглядит как фрагмент воспроизведения видео на YouTube. Все шло хорошо, но теперь я столкнулся с проблемой использования памяти.

Мне нужно изменить поле для анимации. Для этого я использую слушатель прокрутки, чтобы получить координаты между 0 и 1. Вот как я устанавливаю поле моего макета:

void setMargin(View view1, int top) {
    ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) view1.getLayoutParams();
    params.topMargin = top;
    view1.requestLayout();
}

@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
    if (slideOffset >= 0) {
        int ii = (int) (height * (1 - slideOffset) + (playerViewFirstHeight * slideOffset));
        setMargin(frame_middle, ii);
    } else { }
}

Мое мнение таково.

<FrameLayout
    android:id="@+id/frame_middle"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="200dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/frame_header">

    <ProgressBar
        android:id="@+id/progressB_frame_middle_fr_playing"
        style="?android:attr/progressBarStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" />

    <android.support.v4.widget.NestedScrollView
        android:id="@+id/scrollV_frame_middle_fr_playing"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/frame_header">

        <LinearLayout
            android:id="@+id/linearL_frame_middle_fr_playing"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:focusableInTouchMode="true"
            android:orientation="vertical">

            <android.support.constraint.ConstraintLayout
                android:id="@+id/constraintL_video_information"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="8dp">

                <LinearLayout
                    android:id="@+id/linearLayout"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="8dp"
                    android:orientation="horizontal"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toBottomOf="@+id/textView6">

                    <ImageView
                        android:id="@+id/imageView"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:layout_weight="1"
                        android:tint="#757575"
                        app:layout_constraintStart_toStartOf="parent"
                        app:layout_constraintTop_toBottomOf="@+id/textV_published_at"
                        app:srcCompat="@drawable/ic_thumb_up_black_24dp" />

                    <TextView
                        android:id="@+id/textView4"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginStart="4dp"
                        android:layout_weight="1"
                        app:layout_constraintBottom_toBottomOf="@+id/imageView"
                        app:layout_constraintStart_toEndOf="@+id/imageView" />

                    <ImageView
                        android:id="@+id/imageView2"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:layout_marginStart="8dp"
                        android:layout_weight="1"
                        android:tint="#757575"
                        app:layout_constraintBottom_toBottomOf="@+id/textView4"
                        app:layout_constraintStart_toEndOf="@+id/textView4"
                        app:srcCompat="@drawable/ic_thumb_down_black_24dp" />

                    <TextView
                        android:id="@+id/textView5"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginStart="4dp"
                        android:layout_weight="1"
                        app:layout_constraintBottom_toBottomOf="@+id/imageView2"
                        app:layout_constraintStart_toEndOf="@+id/imageView2" />
                </LinearLayout>

                <ImageView
                    android:id="@+id/imageV_whatsapp"
                    android:layout_width="24dp"
                    android:layout_height="24dp"
                    android:layout_marginBottom="8dp"
                    android:layout_marginEnd="8dp"
                    android:tint="#757575"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:srcCompat="@drawable/ic_share_black_24dp" />

                <TextView
                    android:id="@+id/textV_video_category"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginStart="8dp"
                    android:textColor="@color/colorAccent"
                    app:layout_constraintBottom_toBottomOf="@+id/textView6"
                    app:layout_constraintStart_toEndOf="@+id/textView6"
                    app:layout_constraintTop_toTopOf="@+id/textView6" />

                <TextView
                    android:id="@+id/textV_video_channel_name"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="8dp"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toBottomOf="@+id/textV_video_title" />

                <TextView
                    android:id="@+id/textV_video_title"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_alignParentTop="true"
                    android:gravity="center_vertical"
                    android:textColor="@android:color/black"
                    android:textSize="18sp"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent" />

                <View
                    android:id="@+id/view2"
                    android:layout_width="match_parent"
                    android:layout_height="1dp"
                    android:layout_marginTop="8dp"
                    android:background="#e0e0e0"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toBottomOf="@+id/linearLayout" />

                <ImageView
                    android:id="@+id/imageV_download"
                    android:layout_width="24dp"
                    android:layout_height="24dp"
                    android:layout_marginBottom="8dp"
                    android:layout_marginEnd="8dp"
                    android:tint="#757575"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintEnd_toStartOf="@+id/imageV_whatsapp"
                    app:srcCompat="@drawable/ic_download_button" />

                <TextView
                    android:id="@+id/textView6"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="8dp"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toBottomOf="@+id/textV_video_channel_name" />
            </android.support.constraint.ConstraintLayout>

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <TextView
                    android:id="@+id/textView"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginStart="8dp"
                    android:layout_marginTop="4dp"
                    android:textColor="@android:color/black" />

                <android.support.v7.widget.RecyclerView
                    android:id="@+id/recyclerV_related_videos"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_below="@+id/textView" />
            </RelativeLayout>

        </LinearLayout>
    </android.support.v4.widget.NestedScrollView>

</FrameLayout>

Подводя итог, я запускаю описанный выше метод много раз при прокрутке. Таким образом, использование памяти значительно увеличивается. Несмотря на уничтожение этого фрагмента, использование памяти остается почти таким же. Мне кажется, моя точка зрения прорисовывается много раз и не очищает себя от предыдущих случаев.

Я не мог найти никакого решения для этого, и мне действительно нужны ваши идеи. Заранее спасибо.

...