您的位置:首页 > 其它

带删除线的TextView,删除线颜色与宽度可以设置

2018-02-05 15:58 218 查看
一.定义三个属性:删除线的颜色,宽度,是否显示删除线

<declare-styleable name="DeleteLineTextView">
<attr name="showDeleteLine">
<enum name="show" value="0" />
<enum name="hide" value="1" />
</attr>
<attr name="deleteLineColor" format="color|reference" />
<attr name="deleteLineWidth" format="dimension" />
</declare-styleable>

二.自定义view继承自TextView


import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.text.TextPaint;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.TextView;

/**
* 带删除线的TextView,删除线颜色与宽度可以设置
*/

public class DeleteLineTextView extends TextView {

public static final String TAG = "DeleteLineTextView";
Paint linePaint;
int showDeleteLine;
int deleteLineColor;
int deleteLineWidth;
int i;
public static final int SHOW = 0;
public static final int HIDE = 1;

public DeleteLineTextView(Context context) {
this(context, null);
}

public DeleteLineTextView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}

public DeleteLineTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.DeleteLineTextView);
int indexCount = typedArray.getIndexCount();
showDeleteLine = typedArray.getInt(R.styleable.DeleteLineTextView_showDeleteLine, HIDE);
deleteLineColor = typedArray.getColor(R.styleable.DeleteLineTextView_deleteLineColor, Color.BLACK);
deleteLineWidth = (int) typedArray.getDimension(R.styleable.DeleteLineTextView_deleteLineWidth, 1f);
typedArray.recycle();
Log.e(TAG, "deleteLineWidth:" + deleteLineWidth);
i = dip2px(context, deleteLineWidth);
linePaint = new Paint();

}

@Override
protected void onDraw(Canvas canvas) {
if (showDeleteLine == SHOW) {
linePaint.setAntiAlias(true);
linePaint.setColor(deleteLineColor);
linePaint.setStrokeWidth(i);
int lineCount = this.getLineCount();
if (lineCount != 0) {
int lineHeight = this.getLineHeight();
int baseline = this.getBaseline();
int viewWidth = getWidth();
int paddingLeft = getPaddingLeft();
int paddingRight = getPaddingRight();
TextPaint paint = getPaint();
String text = (String) getText();
int textLength = text.length();
Rect rect = new Rect();
paint.getTextBounds(text, 0, textLength, rect);
int singleLineHeight = rect.height();
float textWidth = rect.width();
int halfHeight = baseline - singleLineHeight / 2;
if (lineCount == 1) {
canvas.drawLine(paddingLeft, halfHeight,
textWidth + paddingLeft, halfHeight, linePaint);
} else {
//多行时,计算最后一行字符串所占长度
float sigleTextWidth = textWidth / textLength;//一个字符的宽度
int textSumInLine =
(int) ((viewWidth - paddingLeft - paddingRight) / sigleTextWidth);//每行中字符的个数,int向下取余
int sigleLineTextWidth =
(int) (textSumInLine * sigleTextWidth);
int lastLineTextCount =
textLength - textSumInLine * (lineCount - 1);
int lastLineWidth =
(int) (lastLineTextCount * sigleTextWidth);
for (int i = 0; i < lineCount; i++) {
if (i == lineCount - 1) {
canvas.drawLine(paddingLeft,
halfHeight + i * lineHeight,
lastLineWidth + paddingLeft,
halfHeight + i * lineHeight, linePaint);
} else {
canvas.drawLine(paddingLeft,
halfHeight + i * lineHeight,
sigleLineTextWidth + paddingLeft,
halfHeight + i * lineHeight, linePaint);
}
}
}

}
}
super.onDraw(canvas);
}

public void setShowDeleteLine(boolean show) {
if (show) {
this.showDeleteLine = SHOW;
} else {
this.showDeleteLine = HIDE;
}
}

public void setDeleteLineColor(int deleteLineColor) {
this.deleteLineColor = deleteLineColor;
}

public void setDeleteLineWidth(Context context,int deleteLineWidth) {
i = dip2px(context, deleteLineWidth);
}

public static int dip2px(Context context, float dpValue) {
float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
}

三.XML中使用

xmlns:app="http://schemas.android.com/apk/res-auto"

<com.ycq.rongtest.DeleteLineTextView
android:id="@+id/linetextview"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:background="#00ff00"
android:paddingLeft="10dp"
android:paddingRight="15dp"
android:paddingTop="20dp"
android:text="12345678900987876123456789009876"
android:textSize="21sp"
app:deleteLineWidth="1dp"
app:deleteLineColor="#00ffff"
app:showDeleteLine="show"/>

四.Activity中使用

DeleteLineTextView linetextview = (DeleteLineTextView) findViewById(R.id.linetextview);
linetextview.setDeleteLineColor(Color.parseColor("#0000ff"));
linetextview.setShowDeleteLine(true);
linetextview.setDeleteLineWidth(this,1);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息