Мерцание в верхней части экрана переработчика

Я вижу мерцание в моем представлении переработчика прямо вверху. Мерцание, похоже, напоминает верхние строки моих рисуемых фигур в файле item.xml представления recycler. Я внес различные коррективы в линии и другие вещи, чтобы увидеть, смогу ли я предотвратить мерцание, но, похоже, ничего не работает.

Вот мой код;

Активность

<?xml version = "1.0" encoding = "utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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 = "match_parent"
    android:layout_height = "wrap_content"
    tools:context = ".ScoreHistory">

    <TextView
        android:id = "@+id/textView_history_title"
        android:layout_width = "match_parent"
        android:layout_height = "60dp"
        android:layout_marginStart = "16dp"
        android:layout_marginTop = "16dp"
        android:layout_marginEnd = "16dp"
        android:gravity = "center|center_horizontal|center_vertical"
        android:padding = "5dp"
        android:text = "@string/GameHistory_Title"
        android:textAlignment = "gravity"
        android:textColor = "@color/lime"
        android:textStyle = "bold"
        app:autoSizeTextType = "uniform"
        app:layout_constraintEnd_toEndOf = "parent"
        app:layout_constraintStart_toStartOf = "parent"
        app:layout_constraintTop_toTopOf = "parent" />

    <androidx.recyclerview.widget.RecyclerView
        android:id = "@+id/RV_scorehistory"
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content"
        app:layout_constraintEnd_toEndOf = "parent"
        app:layout_constraintStart_toStartOf = "parent"
        app:layout_constraintTop_toBottomOf = "@+id/textView_history_title" />


</androidx.constraintlayout.widget.ConstraintLayout>

Мой товар.xml

<?xml version = "1.0" encoding = "utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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 = "match_parent"
    android:layout_height = "55dp"
    android:layout_marginLeft = "5dp"
    android:layout_marginRight = "5dp"
    android:background = "@drawable/rv_lines"
    android:gravity = "center_vertical">

    <TextView
        android:id = "@+id/TV_RV_ID"
        android:layout_width = "0dp"
        android:layout_height = "match_parent"
        android:layout_margin = "0dp"
        android:gravity = "center"
        android:textAlignment = "center"
        app:layout_constraintEnd_toStartOf = "@+id/TV_RV_DIFFICULTY"
        app:layout_constraintHorizontal_bias = "0.5"
        app:layout_constraintHorizontal_weight = "1"
        app:layout_constraintStart_toStartOf = "parent"
        app:layout_constraintTop_toTopOf = "parent" />

    <TextView
        android:id = "@+id/TV_RV_DIFFICULTY"
        android:layout_width = "0dp"
        android:layout_height = "match_parent"
        android:layout_marginStart = "2dp"
        android:gravity = "center"
        android:textAlignment = "center"
        app:layout_constraintBaseline_toBaselineOf = "@+id/TV_RV_ID"
        app:layout_constraintEnd_toStartOf = "@+id/TV_RV_SUMTYPE"
        app:layout_constraintHorizontal_bias = "0.5"
        app:layout_constraintHorizontal_weight = "4"
        app:layout_constraintStart_toEndOf = "@+id/TV_RV_ID" />

    <TextView
        android:id = "@+id/TV_RV_SUMTYPE"
        android:layout_width = "0dp"
        android:layout_height = "match_parent"
        android:layout_marginStart = "2dp"
        android:gravity = "center"
        android:textAlignment = "center"
        app:layout_constraintBaseline_toBaselineOf = "@+id/TV_RV_DIFFICULTY"
        app:layout_constraintEnd_toStartOf = "@+id/TV_RV_OutOfText"
        app:layout_constraintHorizontal_bias = "0.5"
        app:layout_constraintHorizontal_weight = "3.5"
        app:layout_constraintStart_toEndOf = "@+id/TV_RV_DIFFICULTY" />

    <TextView
        android:id = "@+id/TV_RV_OutOfText"
        android:layout_width = "0dp"
        android:layout_height = "match_parent"
        android:layout_marginStart = "2dp"
        android:gravity = "center"
        android:text = "@string/score_text"
        app:layout_constraintBaseline_toBaselineOf = "@+id/TV_RV_SUMTYPE"
        app:layout_constraintEnd_toStartOf = "@+id/TV_RV_SCORE"
        app:layout_constraintHorizontal_bias = "0.5"
        app:layout_constraintHorizontal_weight = "2"
        app:layout_constraintStart_toEndOf = "@+id/TV_RV_SUMTYPE" />

    <TextView
        android:id = "@+id/TV_RV_SCORE"
        android:layout_width = "0dp"
        android:layout_height = "match_parent"
        android:layout_marginStart = "6dp"
        android:gravity = "center"
        android:textAlignment = "center"
        android:textStyle = "bold"
        app:layout_constraintBaseline_toBaselineOf = "@+id/TV_RV_OutOfText"
        app:layout_constraintEnd_toStartOf = "@+id/TV_RV_QCOUNT_TEXT"
        app:layout_constraintHorizontal_bias = "0.5"
        app:layout_constraintHorizontal_weight = "1.5"
        app:layout_constraintStart_toEndOf = "@+id/TV_RV_OutOfText" />

    <TextView
        android:id = "@+id/TV_RV_QCOUNT_TEXT"
        android:layout_width = "0dp"
        android:layout_height = "match_parent"
        android:layout_marginStart = "2dp"
        android:gravity = "center"
        android:text = "@string/questions_text"
        android:textAlignment = "gravity"
        android:textStyle = "bold"
        app:layout_constraintBaseline_toBaselineOf = "@+id/TV_RV_SCORE"
        app:layout_constraintEnd_toStartOf = "@+id/TV_RV_QCOUNT"
        app:layout_constraintHorizontal_bias = "0.5"
        app:layout_constraintHorizontal_weight = ".75"
        app:layout_constraintStart_toEndOf = "@+id/TV_RV_SCORE" />

    <TextView
        android:id = "@+id/TV_RV_QCOUNT"
        android:layout_width = "0dp"
        android:layout_height = "match_parent"
        android:layout_marginStart = "2dp"
        android:background = "@drawable/target_icon"
        android:gravity = "center"
        android:textAlignment = "center"
        android:textStyle = "bold"
        app:layout_constraintBaseline_toBaselineOf = "@+id/TV_RV_QCOUNT_TEXT"
        app:layout_constraintEnd_toEndOf = "parent"
        app:layout_constraintHorizontal_bias = "0.5"
        app:layout_constraintHorizontal_weight = "1.5"
        app:layout_constraintStart_toEndOf = "@+id/TV_RV_QCOUNT_TEXT" />
</androidx.constraintlayout.widget.ConstraintLayout>

Я устанавливаю фоновые ресурсы здесь, в моем адаптере

class ScoreHistoryAdaptor : ListAdapter<SavedScores, ScoreHistoryAdaptor.SavedScoreViewHolder>(WordsComparator()) {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SavedScoreViewHolder {
        return SavedScoreViewHolder.create(parent)
    }

    override fun onBindViewHolder(holder: SavedScoreViewHolder, position: Int) {
        val current = getItem(position)
        holder.bind(current.id,current.difficulty,current.sumtype,current.questioncount,current.answeredcorrectly)
    }

    class SavedScoreViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        private val IDItemView: TextView = itemView.findViewById(R.id.TV_RV_ID)
        private val DiffultyItemView: TextView = itemView.findViewById(R.id.TV_RV_DIFFICULTY)
        private val SumTypeItemView: TextView = itemView.findViewById(R.id.TV_RV_SUMTYPE)
        private val qCountItemView: TextView = itemView.findViewById(R.id.TV_RV_QCOUNT)
        private val ScoreItemView: TextView = itemView.findViewById(R.id.TV_RV_SCORE)
        private var DIFFCODE = ""
        private var SUMTYPECODE = ""
        val myContext = SumTypeItemView.context
        fun bind(ID: Int?,DIFFICULTY:String?,SUMTYPE:String?,QC:Int?,SCORE:Int?) {
            IDItemView.text = ID.toString()
            when (DIFFICULTY) {
                myContext.resources.getString(R.string.diffLVL1) -> {DIFFCODE = DIFFICULTY; DiffultyItemView.setBackgroundResource(R.drawable.diff_easy_icon)}
                myContext.resources.getString(R.string.diffLVL2) -> {DIFFCODE = DIFFICULTY ; DiffultyItemView.setBackgroundResource(R.drawable.diff_normal_icon)}
                myContext.resources.getString(R.string.diffLVL3) -> {DIFFCODE = DIFFICULTY; DiffultyItemView.setBackgroundResource(R.drawable.diff_hard_icon) }
                myContext.resources.getString(R.string.diffLVL4) -> {DIFFCODE = DIFFICULTY ; DiffultyItemView.setBackgroundResource(R.drawable.diff_impossible_icon)}
                myContext.resources.getString(R.string.random) -> {DIFFCODE = DIFFICULTY ; DiffultyItemView.setBackgroundResource(R.drawable.diff_random_icon)}
            }

            DiffultyItemView.text = DIFFCODE
            when (SUMTYPE) {
                myContext.resources.getString(R.string.catMulti) -> {SUMTYPECODE = myContext.resources.getString(R.string.multi_symbol) }
                myContext.resources.getString(R.string.catAdd) -> {SUMTYPECODE = myContext.resources.getString(R.string.add_symbol)}
                myContext.resources.getString(R.string.catSub) -> {SUMTYPECODE = myContext.resources.getString(R.string.sub_symbol)}
                myContext.resources.getString(R.string.catDiv) -> {SUMTYPECODE = myContext.resources.getString(R.string.div_symbol)}
                myContext.resources.getString(R.string.catSqrR) -> {SUMTYPECODE = myContext.resources.getString(R.string.sqr_symbol) + "n"}
                myContext.resources.getString(R.string.catSqrD) -> {SUMTYPECODE = "n" + myContext.resources.getString(R.string.sqrd_symbol)}
                myContext.resources.getString(R.string.catCubeR) -> {SUMTYPECODE = myContext.resources.getString(R.string.cuber_symbol) + "n"}
                myContext.resources.getString(R.string.catCubeD) -> {SUMTYPECODE = "n" + myContext.resources.getString(R.string.cubed_symbol)}
                myContext.resources.getString(R.string.random) -> {SUMTYPECODE = myContext.resources.getString(R.string.random)}
            }
            when (IsScoreLessThanTarget(SCORE!!.toInt(),QC!!.toInt())){
                true ->{ScoreItemView.setBackgroundResource(R.drawable.somewrong_icon)}
                false ->{ScoreItemView.setBackgroundResource(R.drawable.allcorrect_icon)}
            }
            SumTypeItemView.setBackgroundResource(R.drawable.sumtype_icon)
            SumTypeItemView.text = SUMTYPECODE
            qCountItemView.text = QC.toString()
            ScoreItemView.text = SCORE.toString()
        }



        companion object {
            fun create(parent: ViewGroup): SavedScoreViewHolder {
                val view: View = LayoutInflater.from(parent.context)
                    .inflate(R.layout.row_item, parent, false)
                return SavedScoreViewHolder(view)
            }
        }
    }

    class WordsComparator : DiffUtil.ItemCallback<SavedScores>() {
        override fun areItemsTheSame(oldItem: SavedScores, newItem: SavedScores): Boolean {
            return oldItem.id == newItem.id
        }

        override fun areContentsTheSame(oldItem: SavedScores, newItem: SavedScores): Boolean {
            return oldItem == newItem
        }
    }
}
private fun IsScoreLessThanTarget(score:Int,target:Int): Boolean{
    return score < target
}

Мерцание в верхней части экрана переработчика

В другом представлении с использованием прокрутки я получаю то же самое

Мерцание в верхней части экрана переработчика

Добавьте скриншот того, что вы видите!

Harsh0021 22.12.2020 18:29

@Harsh0021 добавил картинку. И когда вы прокручиваете его, он мерцает, и, как я сказал выше, он напоминает верхнюю часть рисунков из предметов.

UnknownError 22.12.2020 18:41

Что вы имели в виду под мерцанием. Не могли бы вы рассказать мне об этом?

Harsh0021 22.12.2020 18:43

@ Hardh0021 это означает, что когда вы прокручиваете его, строки, которые вы видите, мерцают неуместно. Появляются и быстро исчезают. Как мерцание. Я не могу описать это лучше, потому что мерцание — это слово, используемое для его описания: / и это не обязательно быстрая прокрутка. Я могу прокручивать только миллиметр за раз, и он все еще мерцает

UnknownError 22.12.2020 18:46

Найдите, где вы берете.

Harsh0021 22.12.2020 18:48

@Harsh0021 в верхней части окна переработчика ниже, где написано «История». Частичные строки

UnknownError 22.12.2020 18:49

Давайте продолжим обсуждение в чате.

Harsh0021 22.12.2020 18:55

Вы пробовали это на других телефонах, и это эмулятор, который вы тестируете?

Harsh0021 26.12.2020 09:13

@Harsh0021 У меня есть только одно физическое устройство для тестирования, которое я и использую. Неиспользуемый эмулятор

UnknownError 26.12.2020 13:50

попробуйте использовать другие устройства. Может проблема в телефоне или еще в чем

Harsh0021 26.12.2020 15:44

@Harsh0021 Я предполагаю, что это зависит от устройства, поскольку мне удалось протестировать два разных устройства Samsung, и я не смог воспроизвести проблему. Но на моем хафуре (не говори так....) все равно бывает. Хотел бы я все еще понять причину ... Я уверен, что у других людей есть мусорные устройства, такие как я, лол.

UnknownError 26.12.2020 17:01

тогда ставь галочку и баунти😉😉😉😉

Harsh0021 26.12.2020 17:05

@Harsh0021 Я не считаю это решенным. Проблема все еще существует на моем устройстве и, возможно, на многих других, которые я не смог проверить. Но поскольку вы приложили усилия, чтобы пообщаться со мной по этому вопросу, я отмечу ваш, если вы включите комментарии, которые я сделал в свой ответ (не решенный, а специфичный для устройства). И если вы хотите взглянуть... Мне нужна помощь и здесь: codereview.stackexchange.com/questions/253777/…

UnknownError 26.12.2020 17:09

@Harsh0021 Награду можно получить за 7 часов, по-видимому.

UnknownError 26.12.2020 17:13

Попробуйте добавить немного отступов в вид переработчика сверху.

Prashant.J 29.12.2020 20:51

@Prashant.J, не могли бы вы опубликовать свой комментарий в качестве ответа, пожалуйста. И мой вид прокрутки, и вид повторного использования с верхним и нижним отступом 5dp предотвращают мерцание.

UnknownError 29.12.2020 21:14

Вы выполняете много работы в своем onBind, загружаете фоны и устанавливаете их в представлениях, и некоторые из них не нужны, например, вам нужно переместить SumTypeItemView.setBackgroundResource(R.drawable.sumtype_ico‌​n) из вашей функции привязки

feridok 30.12.2020 11:15

Чем больше я смотрю на ваш код, тем больше проблем с производительностью я вижу в нем, вы используете ресурсы из R.string с помощью when, что, как я полагаю, снижает производительность вашего ресайклера.

feridok 30.12.2020 11:19

У меня есть предложение для вас, прокомментируйте все строки в функции привязки, установите фон в вашем My_item.xml для ваших текстовых представлений, запустите свой код и проверьте результат, скажите мне, видите ли вы все еще мерцание или нет.

feridok 30.12.2020 11:21

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

feridok 30.12.2020 11:23

@feridok как установить переменный фон непосредственно в файле макета xml? Я добавлю свой класс данных. Просто чтобы сообщить, как комментарий от Prashant padding исправил мою проблему. И как новичок я не сомневаюсь, что может быть много улучшений. Поскольку вы предлагаете помочь мне с данными, пожалуйста, смотрите этот пост вместо этого codereview.stackexchange.com/questions/253777/…

UnknownError 30.12.2020 12:10

не переменная, установите фиксированную, чтобы проверить, вызвана ли задержка/мерцание логикой привязки или нет.

feridok 30.12.2020 12:43

@fedirok Я не уверен, что это был просто адаптер, поскольку у меня есть прокрутка, где это также происходит, и это не проходит через адаптер. В дополнение к этому, отступы вверху и внизу либо recyclerview, либо scrollview действительно решили проблему, которую я подтвердил. Я не отрицаю возможность установки такого количества ресурсов, являющихся причиной проблемы в любом месте. Мое приложение должно обеспечивать различные визуальные эффекты в зависимости от предоставленных значений, поэтому мне все еще нужно иметь возможность достичь этого результата.

UnknownError 30.12.2020 13:04

@UnknownError Я считаю, что это можете исправить только вы. Есть много движущихся частей, поэтому вы должны минимизировать проблему, насколько это возможно. Закомментируйте основные части кода, чтобы поэкспериментировать только с одним типом представления. Попробуйте использовать match_parent вместо wrap_content для корневого ограничения. Уменьшите данные, чтобы recyclerview немного прокручивался. Попробуйте LinearLayout вместо ограничения, попробуйте ограничение с атрибутом цепочки. В общем, разделяй и властвуй. Также некоторые TextViews имеют другое textAlignment. Лично я подозреваю, что проблема связана с высотой макета.

nkhar 31.12.2020 09:01

@nkhar смотрите все предыдущие комментарии. Я уже несколько раз заявлял, что прашантский комментарий дал правильный результат. Выравнивание текста происходит, как и ожидалось, на больших и маленьких экранах как в портретной, так и в горизонтальной ориентации. Я разместил ссылку выше на другой пост, связанный с данными и представлениями. Если вы хотите просмотреть это, это будет полезно, поскольку цель этого поста — попытаться уменьшить количество просмотров и количество отдельных точек данных. Сокращение данных не является решением (ЭТО НИКОГДА НЕ ДОЛЖНО БЫТЬ), но помощь в уточнении способа доступа к данным и их отображения была бы очень признательна.

UnknownError 31.12.2020 18:15
1
25
214
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваша проблема возникает, потому что в вашем my_item.xml

<androidx.constraintlayout.widget.ConstraintLayout 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 = "match_parent"
    android:layout_height = "55dp" <---- Fixed Height
    android:layout_marginLeft = "5dp"
    android:layout_marginRight = "5dp"
    android:background = "#ae7f9c"
    android:gravity = "center_vertical">

и в ваших текстовых представлениях, подобных этому,

<TextView
        android:id = "@+id/TV_RV_ID"
        android:layout_width = "0dp"
        android:layout_height = "match_parent"  <------ this hiding the background try using wrap_content
        android:layout_margin = "0dp"
        android:gravity = "center"
        android:textAlignment = "center"
        app:layout_constraintEnd_toStartOf = "@+id/TV_RV_DIFFICULTY"
        app:layout_constraintHorizontal_bias = "0.5"
        app:layout_constraintHorizontal_weight = "1"
        app:layout_constraintStart_toStartOf = "parent"
        app:layout_constraintTop_toTopOf = "parent" />

Чтобы решить эту проблему,

  • Попробуйте не указывать фиксированную высоту контейнера my_item.xml, используйте wrap_content
  • Добавьте отступы в контейнер constaintlayout
  • добавьте android:layout_height = "wrap_content" к своим текстовым представлениям и center_vertical их,

тогда ваша проблема будет решена, надеюсь, это поможет

попробуйте не задавать фиксированную высоту для контейнера

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