Skip to content
Snippets Groups Projects
Commit a67166b2 authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Improve rendering performance of markerline

parent 9739c4bd
Branches
Tags
No related merge requests found
Showing
with 372 additions and 388 deletions
......@@ -16,7 +16,7 @@ import org.threeten.bp.temporal.ChronoUnit
class DayChangeItemDecoration(private val adapter: MessageAdapter) :
RecyclerView.ItemDecoration() {
private val dayChangeFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM)
private val mBounds = Rect()
private val bounds = Rect()
override fun onDraw(c: Canvas, parent: RecyclerView, state: RecyclerView.State) {
c.save()
......@@ -35,9 +35,9 @@ class DayChangeItemDecoration(private val adapter: MessageAdapter) :
for (i in 0 until childCount) {
val child = parent.getChildAt(i)
if (child.getTag(R.id.tag_daychange) == true) {
parent.getDecoratedBoundsWithMargins(child, mBounds)
val bottom = mBounds.bottom + Math.round(child.translationY)
val top = mBounds.top + Math.round(child.translationY)
parent.getDecoratedBoundsWithMargins(child, bounds)
val bottom = bounds.bottom + Math.round(child.translationY)
val top = bounds.top + Math.round(child.translationY)
val layout = child.getTag(R.id.tag_daychange_layout) as View
c.save()
c.clipRect(left.toFloat(), top.toFloat(), right.toFloat(), bottom.toFloat())
......
package de.kuschku.quasseldroid.ui.chat.messages
import android.content.Context
import android.graphics.Canvas
import android.graphics.Paint
import android.graphics.Rect
import android.support.annotation.AttrRes
import android.support.annotation.DimenRes
import android.support.v7.widget.RecyclerView
import android.view.View
import de.kuschku.quasseldroid.R
import de.kuschku.quasseldroid.util.helper.styledAttributes
class MarkerLineItemDecoration(
private val adapter: MessageAdapter,
context: Context,
@DimenRes height: Int,
@AttrRes markerlineColor: Int
) : RecyclerView.ItemDecoration() {
private val bounds = Rect()
private val height = context.resources.getDimensionPixelSize(height)
private val color = context.theme.styledAttributes(markerlineColor) {
Paint().apply {
color = getColor(0, 0)
}
}
override fun onDraw(c: Canvas, parent: RecyclerView, state: RecyclerView.State) {
c.save()
val left: Int
val right: Int
if (parent.clipToPadding) {
left = parent.paddingLeft
right = parent.width - parent.paddingRight
c.clipRect(left, parent.paddingTop, right, parent.height - parent.paddingBottom)
} else {
left = 0
right = parent.width
}
val childCount = parent.childCount
for (i in 0 until childCount) {
val child = parent.getChildAt(i)
if (child.getTag(R.id.tag_markerline) == true) {
parent.getDecoratedBoundsWithMargins(child, bounds)
val bottom = bounds.bottom + Math.round(child.translationY)
val top = bottom - height
c.drawRect(left.toFloat(), top.toFloat(), right.toFloat(), bottom.toFloat(), color)
}
}
c.restore()
}
override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView,
state: RecyclerView.State) {
adapter[parent.getChildAdapterPosition(view)]?.let {
if (it.isMarkerLine) {
view.setTag(R.id.tag_markerline, true)
outRect.set(0, 0, height, 0)
} else {
view.setTag(R.id.tag_markerline, false)
}
}
}
}
......@@ -22,7 +22,6 @@ import de.kuschku.quasseldroid.GlideApp
import de.kuschku.quasseldroid.R
import de.kuschku.quasseldroid.persistence.QuasselDatabase
import de.kuschku.quasseldroid.util.helper.getOrPut
import de.kuschku.quasseldroid.util.helper.visibleIf
import de.kuschku.quasseldroid.viewmodel.data.FormattedMessage
import me.saket.bettermovementmethod.BetterLinkMovementMethod
......@@ -150,10 +149,6 @@ class MessageAdapter(
@JvmField
var combined: TextView? = null
@BindView(R.id.markerline)
@JvmField
var markerline: View? = null
private var message: FormattedMessage? = null
private var selectable: Boolean = false
private var clickable: Boolean = false
......@@ -195,7 +190,6 @@ class MessageAdapter(
name?.text = message.name
content?.text = message.content
combined?.text = message.combined
markerline?.visibleIf(message.isMarkerLine)
this.itemView.isSelected = message.isSelected
......
......@@ -377,6 +377,9 @@ class MessageListFragment : ServiceBoundFragment() {
messageList.addOnScrollListener(preloader)
messageList.addItemDecoration(DayChangeItemDecoration(adapter))
messageList.addItemDecoration(MarkerLineItemDecoration(
adapter, requireContext(), R.dimen.markerline_height, R.attr.colorMarkerLine
))
return view
}
......
......@@ -4,19 +4,14 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/backgroundMenuItem"
android:orientation="vertical"
android:textAppearance="?android:attr/textAppearanceListItemSmall">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingBottom="@dimen/message_vertical"
android:paddingEnd="@dimen/message_horizontal"
android:paddingLeft="@dimen/message_horizontal"
android:paddingRight="@dimen/message_horizontal"
android:paddingStart="@dimen/message_horizontal"
android:paddingTop="@dimen/message_vertical">
android:paddingTop="@dimen/message_vertical"
android:textAppearance="?android:attr/textAppearanceListItemSmall">
<TextView
android:id="@+id/time_left"
......@@ -60,11 +55,3 @@
tools:textSize="11.9sp"
tools:visibility="visible" />
</LinearLayout>
<View
android:id="@+id/markerline"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="?colorMarkerLine"
android:visibility="gone" />
</LinearLayout>
\ No newline at end of file
......@@ -7,10 +7,6 @@
android:orientation="vertical"
android:textAppearance="?android:attr/textAppearanceListItemSmall">
<Space
android:layout_width="match_parent"
android:layout_height="@dimen/message_vertical" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
......
......@@ -4,19 +4,14 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/backgroundMenuItem"
android:orientation="vertical"
android:textAppearance="?android:attr/textAppearanceListItemSmall">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingBottom="@dimen/message_vertical"
android:paddingEnd="@dimen/message_horizontal"
android:paddingLeft="@dimen/message_horizontal"
android:paddingRight="@dimen/message_horizontal"
android:paddingStart="@dimen/message_horizontal"
android:paddingTop="@dimen/message_vertical">
android:paddingTop="@dimen/message_vertical"
android:textAppearance="?android:attr/textAppearanceListItemSmall">
<TextView
android:id="@+id/time_left"
......@@ -58,11 +53,3 @@
tools:textSize="11.9sp"
tools:visibility="visible" />
</LinearLayout>
<View
android:id="@+id/markerline"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="?colorMarkerLine"
android:visibility="gone" />
</LinearLayout>
\ No newline at end of file
......@@ -4,19 +4,14 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/backgroundMenuItem"
android:orientation="vertical"
android:textAppearance="?android:attr/textAppearanceListItemSmall">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingBottom="@dimen/message_vertical"
android:paddingEnd="@dimen/message_horizontal"
android:paddingLeft="@dimen/message_horizontal"
android:paddingRight="@dimen/message_horizontal"
android:paddingStart="@dimen/message_horizontal"
android:paddingTop="@dimen/message_vertical">
android:paddingTop="@dimen/message_vertical"
android:textAppearance="?android:attr/textAppearanceListItemSmall">
<TextView
android:id="@+id/time_left"
......@@ -59,11 +54,3 @@
tools:textSize="11.9sp"
tools:visibility="visible" />
</LinearLayout>
<View
android:id="@+id/markerline"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="?colorMarkerLine"
android:visibility="gone" />
</LinearLayout>
\ No newline at end of file
......@@ -4,19 +4,14 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/backgroundMenuItem"
android:orientation="vertical"
android:textAppearance="?android:attr/textAppearanceListItemSmall">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingBottom="@dimen/message_vertical"
android:paddingEnd="@dimen/message_horizontal"
android:paddingLeft="@dimen/message_horizontal"
android:paddingRight="@dimen/message_horizontal"
android:paddingStart="@dimen/message_horizontal"
android:paddingTop="@dimen/message_vertical">
android:paddingTop="@dimen/message_vertical"
android:textAppearance="?android:attr/textAppearanceListItemSmall">
<TextView
android:id="@+id/time_left"
......@@ -58,11 +53,3 @@
tools:textSize="11.9sp"
tools:visibility="visible" />
</LinearLayout>
<View
android:id="@+id/markerline"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="?colorMarkerLine"
android:visibility="gone" />
</LinearLayout>
\ No newline at end of file
......@@ -4,20 +4,15 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/backgroundMenuItem"
android:orientation="vertical"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
tools:showIn="@layout/fragment_messages">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingBottom="@dimen/message_vertical"
android:paddingEnd="@dimen/message_horizontal"
android:paddingLeft="@dimen/message_horizontal"
android:paddingRight="@dimen/message_horizontal"
android:paddingStart="@dimen/message_horizontal"
android:paddingTop="@dimen/message_vertical">
android:paddingTop="@dimen/message_vertical"
android:textAppearance="?android:attr/textAppearanceListItemSmall"
tools:showIn="@layout/fragment_messages">
<TextView
android:id="@+id/time_left"
......@@ -113,11 +108,3 @@
</LinearLayout>
</LinearLayout>
</LinearLayout>
<View
android:id="@+id/markerline"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="?colorMarkerLine"
android:visibility="gone" />
</LinearLayout>
\ No newline at end of file
......@@ -4,19 +4,14 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/backgroundMenuItem"
android:orientation="vertical"
android:textAppearance="?android:attr/textAppearanceListItemSmall">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingBottom="@dimen/message_vertical"
android:paddingEnd="@dimen/message_horizontal"
android:paddingLeft="@dimen/message_horizontal"
android:paddingRight="@dimen/message_horizontal"
android:paddingStart="@dimen/message_horizontal"
android:paddingTop="@dimen/message_vertical">
android:paddingTop="@dimen/message_vertical"
android:textAppearance="?android:attr/textAppearanceListItemSmall">
<TextView
android:id="@+id/time_left"
......@@ -58,11 +53,3 @@
tools:textSize="11.9sp"
tools:visibility="visible" />
</LinearLayout>
<View
android:id="@+id/markerline"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="?colorMarkerLine"
android:visibility="gone" />
</LinearLayout>
\ No newline at end of file
......@@ -5,6 +5,8 @@
<dimen name="message_vertical">2dp</dimen>
<dimen name="message_vertical_daychange">8dp</dimen>
<dimen name="markerline_height">1dp</dimen>
<dimen name="autocomplete_max_height">96dp</dimen>
<dimen name="max_content_width">480dp</dimen>
......
......@@ -3,4 +3,6 @@
<item name="tag_daychange" type="id" />
<item name="tag_daychange_layout" type="id" />
<item name="tag_daychange_content" type="id" />
<item name="tag_markerline" type="id" />
</resources>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment