Почему ConstraintLayout медленнее, чем LinearLayout в элементе RecyclerView?

Я меняю элемент xml в recyclyerView с LinearLayout на ConstraintLayout. Когда я прокручиваю recyclerView по горизонтали, он тормозит и отображается очень медленно, чем LinearLayout.

ConstraintLayout

Почему ConstraintLayout медленнее, чем LinearLayout в элементе RecyclerView?

LinearLayout

Почему ConstraintLayout медленнее, чем LinearLayout в элементе RecyclerView?

Здесь я делюсь своим xml для ConstraintLayout.

мой элемент ConstraintLayout

<android.support.v7.widget.CardView 
    xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:app = "http://schemas.android.com/apk/res-auto"
    xmlns:tools = "http://schemas.android.com/tools"
    android:layout_width = "85dp"
    android:layout_height = "wrap_content">

<android.support.constraint.ConstraintLayout
    android:id = "@+id/merchant_layout"
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    android:layout_marginBottom = "10dp"
    android:layout_marginEnd = "5dp"
    android:layout_marginStart = "5dp">

    <de.hdodenhof.circleimageview.CircleImageView
        android:id = "@+id/merchant_img"
        android:layout_width = "75dp"
        android:layout_height = "75dp"
        android:transitionName = "profile"
        app:layout_constraintEnd_toEndOf = "parent"
        app:layout_constraintStart_toStartOf = "parent"
        app:layout_constraintTop_toTopOf = "parent"
        tools:ignore = "UnusedAttribute"
        tools:src = "@drawable/avatar" />

    <com.max.xclusivekotlin.customViews.MyTextView
        android:id = "@+id/merchant_name"
        android:layout_width = "0dp"
        android:layout_height = "wrap_content"
        android:layout_marginEnd = "5dp"
        android:layout_marginStart = "5dp"
        android:layout_marginTop = "5dp"
        android:ellipsize = "end"
        android:maxLines = "1"
        android:maxWidth = "72dp"
        android:minWidth = "72dp"
        android:textAlignment = "center"
        android:textColor = "@color/blackFont"
        android:textSize = "14sp"
        app:layout_constraintEnd_toEndOf = "@id/merchant_img"
        app:layout_constraintStart_toStartOf = "@id/merchant_img"
        app:layout_constraintTop_toBottomOf = "@id/merchant_img"
        tools:text = "Chili's" />

    <com.max.xclusivekotlin.customViews.MyTextView
        android:id = "@+id/merchant_offer_percent"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:textColor = "@color/redColor"
        android:textSize = "12sp"
        app:layout_constraintBottom_toTopOf = "@id/tv_distance"
        app:layout_constraintEnd_toStartOf = "@id/merchant_offer_type"
        app:layout_constraintStart_toStartOf = "@id/merchant_name"
        app:layout_constraintTop_toBottomOf = "@id/merchant_name"
        app:textBold = "bold"
        tools:text = "25%" />

    <com.max.xclusivekotlin.customViews.MyTextView
        android:id = "@+id/merchant_offer_type"
        android:layout_width = "0dp"
        android:layout_height = "wrap_content"
        android:ellipsize = "end"
        android:lines = "1"
        android:textColor = "@color/blackFont"
        android:textSize = "12sp"
        app:layout_constraintBottom_toTopOf = "@id/tv_distance"
        app:layout_constraintEnd_toEndOf = "@id/merchant_name"
        app:layout_constraintHorizontal_chainStyle = "packed"
        app:layout_constraintStart_toEndOf = "@id/merchant_offer_percent"
        app:layout_constraintTop_toBottomOf = "@id/merchant_name"
        tools:text = " | Refund " />

    <com.max.xclusivekotlin.customViews.MyTextView
         android:id = "@+id/tv_distance"
         android:layout_width = "0dp"
         android:layout_height = "wrap_content"
         android:ellipsize = "end"
         android:lines = "1"
         android:textAlignment = "center"
         android:textColor = "@color/greyFont"
         android:textSize = "14sp"
         android:visibility = "gone"
         app:layout_constraintBottom_toBottomOf = "parent"
         app:layout_constraintEnd_toEndOf = "@id/merchant_img"
         app:layout_constraintStart_toStartOf = "@id/merchant_img"
         app:layout_constraintTop_toBottomOf = "@id/merchant_offer_percent" />
    </android.support.constraint.ConstraintLayout>
</android.support.v7.widget.CardView>

мой элемент LinearLayout

<android.support.v7.widget.CardView 
xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:app = "http://schemas.android.com/apk/res-auto"
    xmlns:tools = "http://schemas.android.com/tools"
    android:layout_width = "85dp"
    android:layout_height = "wrap_content">

<LinearLayout
    android:id = "@+id/merchant_layout"
    android:layout_width = "75dp"
    android:layout_height = "wrap_content"
    android:layout_marginEnd = "5dp"
    android:layout_marginStart = "5dp"
    android:gravity = "center_horizontal"
    android:orientation = "vertical"
    android:paddingBottom = "10dp">

    <de.hdodenhof.circleimageview.CircleImageView
        android:id = "@+id/merchant_img"
        android:layout_width = "75dp"
        android:layout_height = "75dp"
        android:transitionName = "profile"
        tools:ignore = "UnusedAttribute"
        tools:src = "@drawable/avatar" />

    <com.max.xclusivekotlin.customViews.MyTextView
        android:id = "@+id/merchant_name"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_marginEnd = "5dp"
        android:layout_marginStart = "5dp"
        android:layout_marginTop = "5dp"
        android:ellipsize = "end"
        android:maxLines = "1"
        android:maxWidth = "72dp"
        android:minWidth = "72dp"
        android:textAlignment = "center"
        android:textColor = "@color/blackFont"
        android:textSize = "14sp"
        tools:text = "Chili's" />

    <LinearLayout
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_marginEnd = "5dp"
        android:layout_marginStart = "5dp"
        android:orientation = "horizontal">

        <com.max.xclusivekotlin.customViews.MyTextView
            android:id = "@+id/merchant_offer_percent"
            android:layout_width = "wrap_content"
            android:layout_height = "wrap_content"
            android:textColor = "@color/redColor"
            android:textSize = "12sp"
            app:textBold = "bold"
            tools:text = "25%" />

        <com.max.xclusivekotlin.customViews.MyTextView
            android:id = "@+id/merchant_offer_type"
            android:layout_width = "0dp"
            android:layout_height = "wrap_content"
            android:layout_weight = "1"
            android:ellipsize = "end"
            android:lines = "1"
            android:textColor = "@color/blackFont"
            android:textSize = "12sp"
            tools:text = " | Refund " />
    </LinearLayout>

    <com.max.xclusivekotlin.customViews.MyTextView
        android:id = "@+id/tv_distance"
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content"
        android:ellipsize = "end"
        android:lines = "1"
        android:textAlignment = "center"
        android:textColor = "@color/greyFont"
        android:textSize = "14sp"
        android:visibility = "gone" />
    </LinearLayout>
</android.support.v7.widget.CardView>

Как я могу это решить?

Покажите свой код, как вы выполняете рендеринг.

Faizan Mubasher 08.10.2018 12:16

Да .. пожалуйста, разместите xml и java коды .. !!

Prashanth Verma 08.10.2018 12:29
6
2
3 746
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Может быть, из-за большого количества ограничений, которые вы используете в ConstraintLayout или, может быть, для производительности RecyclerView.

я рекомендую вам использовать RelativeLayout

эта ссылка может вам помочь:

Повышение производительности RecyclerView

Производительность RelativeLayout и ConstraintLayout

Как сделать RecyclerView плавным

хорошо, я знал об этом, теперь я буду использовать RelativeLayout, пока Google не исправит эту ошибку или кто-нибудь не скажет мне, как мне использовать ConstraintLayout для элемента RecyclerView

Mostafa Esmail 15.10.2018 10:52
Ответ принят как подходящий

Относительный макет:

RelativeLayout - это подход к актуализации сложных форматов с уровневым (одним уровнем настройки) контуром. По своей структуре он накладывает друг на друга вещи, совсем не так, как LinearLayout, который никогда не делает этого. Его название говорит о независимости от кого-либо еще, RelativeLayout великолепно помещает вещи относительно других. Предположим, у вас есть неопределенная ширина обзора, и вам нужно пока поставить объект сбоку от него и у основания. Вы можете сделать это с LinearLayout, однако для этого потребовалось бы два урегулирования, с RelativeLayout он стал намного чище.

Макет ограничения:

Центр - RelativeLayout, где можно накладывать друг на друга. Как бы то ни было, что делает ConstraintLayout удивительным, так это то, что он может вытеснять различные конструкции: рамный, относительный, линейный. Действительно, существует множество различных форматов, но это обертки. Что мне нравится в ConstraintLayout, так это то, что он очень хорош в использовании в качестве части режима дизайна, прежде чем я вообще не заботился о нем. По большей части из-за плохой работы моего честного оборудования (для Android Studio) и регулярных ошибок рендеринга свойства ConstraintLayout действительно настолько длинные и ужасающие, что лучше использовать его в режиме дизайна. Он может контролировать положение и измерения (совсем не как RelativeLayout) перспектив. Имейте в виду, что параметры, начинающиеся с layout_, подразумеваются для формата упаковки. Само представление не имеет дело с этими

Таким образом, вы можете использовать свой самый любимый вес из LinearLayout в ConstraintLayout с помощью императивных цепей, приземлиться влево / вправо / вверху / основание из RelativeLayout, наложить такие вещи, как в прямом FrameLayout. Я думаю, что никто не использует GridLayout, это сильно разочаровывает, постоянно предпочитаемый постоянный LinearLayout , с ConstraintLayout вы можете сделать это без особых усилий

Недостаток компоновки ограничений:

Несмотря на то, что это круто, режим структуры все еще не такой безупречный, как XML. Это просто смешивается, вам нужно увеличивать перспективу, и это побуждает вас использовать просто ConstraintLayout, в случае, если вы попытаетесь включить какой-то устойчивый дизайн - вы должны дважды подумать над этим.

Надеюсь, что это поможет вам.

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