Saturday, 26 December 2020

Flicker at top of recycler view

I can see a flicker within my recycler view right at the top. The flicker seems to resemble the top lines of my drawable shapes in the recycler view item.xml. I have made various adjustments to lines and other things to see if I could prevent the flicker but nothing appears to be working.

Here is my code;

Activity

<?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>

My item.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>

I set background resources here in my adapter

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
}

enter image description here

In another view using scrollview I get the same

enter image description here



from Flicker at top of recycler view

No comments:

Post a Comment