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

LinearLayout

Здесь я делюсь своим 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>
Как я могу это решить?
Да .. пожалуйста, разместите xml и java коды .. !!
Может быть, из-за большого количества ограничений, которые вы используете в ConstraintLayout или, может быть, для производительности RecyclerView.
я рекомендую вам использовать RelativeLayout
эта ссылка может вам помочь:
Повышение производительности RecyclerView
Производительность RelativeLayout и ConstraintLayout
Как сделать RecyclerView плавным
хорошо, я знал об этом, теперь я буду использовать RelativeLayout, пока Google не исправит эту ошибку или кто-нибудь не скажет мне, как мне использовать ConstraintLayout для элемента RecyclerView
Относительный макет:
RelativeLayout - это подход к актуализации сложных форматов с уровневым (одним уровнем настройки) контуром. По своей структуре он накладывает друг на друга вещи, совсем не так, как LinearLayout, который никогда не делает этого. Его название говорит о независимости от кого-либо еще, RelativeLayout великолепно помещает вещи относительно других. Предположим, у вас есть неопределенная ширина обзора, и вам нужно пока поставить объект сбоку от него и у основания. Вы можете сделать это с LinearLayout, однако для этого потребовалось бы два урегулирования, с RelativeLayout он стал намного чище.
Макет ограничения:
Центр - RelativeLayout, где можно накладывать друг на друга. Как бы то ни было, что делает ConstraintLayout удивительным, так это то, что он может вытеснять различные конструкции: рамный, относительный, линейный. Действительно, существует множество различных форматов, но это обертки. Что мне нравится в ConstraintLayout, так это то, что он очень хорош в использовании в качестве части режима дизайна, прежде чем я вообще не заботился о нем. По большей части из-за плохой работы моего честного оборудования (для Android Studio) и регулярных ошибок рендеринга свойства ConstraintLayout действительно настолько длинные и ужасающие, что лучше использовать его в режиме дизайна. Он может контролировать положение и измерения (совсем не как RelativeLayout) перспектив. Имейте в виду, что параметры, начинающиеся с layout_, подразумеваются для формата упаковки. Само представление не имеет дело с этими
Таким образом, вы можете использовать свой самый любимый вес из LinearLayout в ConstraintLayout с помощью императивных цепей, приземлиться влево / вправо / вверху / основание из RelativeLayout, наложить такие вещи, как в прямом FrameLayout. Я думаю, что никто не использует GridLayout, это сильно разочаровывает, постоянно предпочитаемый постоянный LinearLayout , с ConstraintLayout вы можете сделать это без особых усилий
Недостаток компоновки ограничений:
Несмотря на то, что это круто, режим структуры все еще не такой безупречный, как XML. Это просто смешивается, вам нужно увеличивать перспективу, и это побуждает вас использовать просто ConstraintLayout, в случае, если вы попытаетесь включить какой-то устойчивый дизайн - вы должны дважды подумать над этим.
Надеюсь, что это поможет вам.
Покажите свой код, как вы выполняете рендеринг.