Page indicator now uses an outline instead of overlapping shadows

This commit is contained in:
inorichi 2017-11-20 13:55:50 +01:00
parent c93bf89cbe
commit d4101c7bdf
2 changed files with 41 additions and 8 deletions

View File

@ -1,17 +1,54 @@
package eu.kanade.tachiyomi.ui.reader
import android.annotation.SuppressLint
import android.content.Context
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.support.v7.widget.AppCompatTextView
import android.text.Spannable
import android.text.SpannableString
import android.text.style.ScaleXSpan
import android.util.AttributeSet
import android.widget.TextView
class PageIndicatorTextView(context: Context, attrs: AttributeSet? = null) :
AppCompatTextView(context, attrs) {
override fun onDraw(canvas: Canvas) {
// We want the shadow to look like an outline
for (i in 0..5) {
val textColor = textColors.defaultColor
textColorField.set(this, Color.BLACK)
paint.strokeWidth = 4f
paint.style = Paint.Style.STROKE
super.onDraw(canvas)
textColorField.set(this, textColor)
paint.strokeWidth = 0f
paint.style = Paint.Style.FILL
super.onDraw(canvas)
}
@SuppressLint("SetTextI18n")
override fun setText(text: CharSequence?, type: BufferType?) {
// Add spaces at the start & end of the text, otherwise the stroke is cut-off because it's
// not taken into account when measuring the text (view's padding doesn't help).
val currText = " $text "
// Also add a bit of spacing between each character, as the stroke overlaps them
val finalText = SpannableString(currText.asIterable().joinToString("\u00A0"))
for (i in 1..finalText.lastIndex step 2) {
finalText.setSpan(ScaleXSpan(0.1f), i, i + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
}
super.setText(finalText, TextView.BufferType.SPANNABLE)
}
private companion object {
// We need to use reflection to set the text color instead of using [setTextColor],
// otherwise the view is invalidated inside [onDraw] and there's an infinite loop
val textColorField = TextView::class.java.getDeclaredField("mCurTextColor").apply {
isAccessible = true
}!!
}
}

View File

@ -31,11 +31,7 @@
android:layout_gravity="bottom|center_horizontal"
android:padding="4dp"
android:textColor="@color/md_white_1000"
android:textStyle="bold"
android:shadowRadius="3"
android:shadowDy="0"
android:shadowDx="0"
android:shadowColor="@color/md_black_1000"/>
android:textStyle="bold" />
</FrameLayout>