Initial commit
This commit is contained in:
commit
21bfbfb139
520 changed files with 47819 additions and 0 deletions
86
app/src/main/java/ani/dantotsu/others/OutlineTextView.kt
Normal file
86
app/src/main/java/ani/dantotsu/others/OutlineTextView.kt
Normal file
|
@ -0,0 +1,86 @@
|
|||
package ani.dantotsu.others
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Canvas
|
||||
import android.graphics.Paint
|
||||
import android.util.AttributeSet
|
||||
import androidx.appcompat.widget.AppCompatTextView
|
||||
import ani.dantotsu.R
|
||||
|
||||
class OutlineTextView : AppCompatTextView {
|
||||
|
||||
private val defaultStrokeWidth = 0F
|
||||
private var isDrawing: Boolean = false
|
||||
|
||||
private var strokeColor: Int = 0
|
||||
private var strokeWidth: Float = 0.toFloat()
|
||||
|
||||
constructor(context: Context) : super(context) {
|
||||
initResources(context, null)
|
||||
|
||||
}
|
||||
|
||||
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
|
||||
initResources(context, attrs)
|
||||
|
||||
}
|
||||
|
||||
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
|
||||
initResources(context, attrs)
|
||||
|
||||
}
|
||||
|
||||
private fun initResources(context: Context?, attrs: AttributeSet?) {
|
||||
if (attrs != null) {
|
||||
val a = context?.obtainStyledAttributes(attrs, R.styleable.OutlineTextView)
|
||||
strokeColor = a!!.getColor(
|
||||
R.styleable.OutlineTextView_outlineColor,
|
||||
currentTextColor
|
||||
)
|
||||
strokeWidth = a.getFloat(
|
||||
R.styleable.OutlineTextView_outlineWidth,
|
||||
defaultStrokeWidth
|
||||
)
|
||||
|
||||
a.recycle()
|
||||
} else {
|
||||
strokeColor = currentTextColor
|
||||
strokeWidth = defaultStrokeWidth
|
||||
}
|
||||
setStrokeWidth(strokeWidth)
|
||||
}
|
||||
|
||||
|
||||
private fun setStrokeWidth(width: Float) {
|
||||
strokeWidth = width.toPx(context)
|
||||
}
|
||||
|
||||
private fun Float.toPx(context: Context) = (this * context.resources.displayMetrics.scaledDensity + 0.5F)
|
||||
|
||||
override fun invalidate() {
|
||||
if (isDrawing) return
|
||||
super.invalidate()
|
||||
}
|
||||
|
||||
|
||||
override fun onDraw(canvas: Canvas) {
|
||||
if (strokeWidth > 0) {
|
||||
isDrawing = true
|
||||
super.onDraw(canvas)
|
||||
|
||||
paint.style = Paint.Style.STROKE
|
||||
paint.strokeWidth = strokeWidth
|
||||
val colorTmp = paint.color
|
||||
setTextColor(strokeColor)
|
||||
super.onDraw(canvas)
|
||||
|
||||
setTextColor(colorTmp)
|
||||
paint.style = Paint.Style.FILL
|
||||
|
||||
isDrawing = false
|
||||
} else {
|
||||
super.onDraw(canvas)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue