1 package com.folioreader.view;
3 import android.content.Context;
4 import android.content.res.TypedArray;
5 import android.graphics.Canvas;
6 import android.graphics.Paint;
7 import android.graphics.Rect;
8 import android.support.v7.widget.AppCompatTextView;
9 import android.text.Layout;
10 import android.util.AttributeSet;
12 import com.folioreader.R;
15 * Created by mobisys on 7/4/2016.
17 public class UnderlinedTextView extends AppCompatTextView {
22 private float mDensity;
23 private float mStrokeWidth;
25 public UnderlinedTextView(Context context) {
26 this(context, null, 0);
29 public UnderlinedTextView(Context context, AttributeSet attrs) {
30 this(context, attrs, 0);
33 public UnderlinedTextView(Context context, AttributeSet attrs, int defStyleAttr) {
34 super(context, attrs, defStyleAttr);
35 init(context, attrs, defStyleAttr);
38 private void init(Context context, AttributeSet attributeSet, int defStyle) {
40 mDensity = context.getResources().getDisplayMetrics().density;
42 TypedArray typedArray =
43 context.obtainStyledAttributes(attributeSet, R.styleable.UnderlinedTextView,
46 typedArray.getDimension(
47 R.styleable.UnderlinedTextView_underlineWidth,
53 mPaint.setStyle(Paint.Style.STROKE);
54 mPaint.setColor(mColor); //line mColor
55 mPaint.setStrokeWidth(mStrokeWidth);
58 public int getUnderLineColor() {
62 public void setUnderLineColor(int mColor) {
66 mPaint.setStyle(Paint.Style.STROKE);
67 mPaint.setColor(mColor); //line mColor
68 mPaint.setStrokeWidth(mStrokeWidth);
72 public float getUnderlineWidth() {
76 public void setUnderlineWidth(float mStrokeWidth) {
77 this.mStrokeWidth = mStrokeWidth;
82 protected void onDraw(Canvas canvas) {
83 int count = getLineCount();
85 final Layout layout = getLayout();
86 float xStart, xStop, xDiff;
87 int firstCharInLine, lastCharInLine;
89 for (int i = 0; i < count; i++) {
90 int baseline = getLineBounds(i, mRect);
91 firstCharInLine = layout.getLineStart(i);
92 lastCharInLine = layout.getLineEnd(i);
94 xStart = layout.getPrimaryHorizontal(firstCharInLine);
95 xDiff = layout.getPrimaryHorizontal(firstCharInLine + 1) - xStart;
96 xStop = layout.getPrimaryHorizontal(lastCharInLine - 1) + xDiff;
98 canvas.drawLine(xStart,
99 baseline + mStrokeWidth,
101 baseline + mStrokeWidth,
105 super.onDraw(canvas);