第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

UI效果の自帶行分割線的TextView

標(biāo)簽:
Android

最近看了老罗的锤子便签应用,感觉很清新,打开便签第一眼感觉每行文字的行分割线很漂亮。无聊之下,做了一个下划线效果,而且还处于不断修改中


效果图如下:


5bdc53010001d86f05280554.jpg

代码如下:

public class UnderlinedTextView extends TextView {

/** 默认的文字行上下间隔 */

private static final int paddingTop = 20;

private static final int paddingBottom = 30;

private static final int paddingLeft = 30;

private static final int paddingRight = 30;

/** 控件的宽度与高度 */

private int mCanvasWidth;

/** 垂直偏移量 */

private int offsetY = 0;

/** 根据屏幕容量,每行内容截取的初始位置 */

private int mStartIndex = 0;

/** 文本数组 */

private ArrayList<String> dataStr = new ArrayList<String>();

/** 文本 */

private String mText;

/** 文本画笔 */

private Paint mPaint;

/** 分割线画笔 */

private Paint mLPaint;

/** 预估一行可以容纳的字符量 */

private int mEstNumber;

/** 字符串总长度 */

private int mTextLen;

/** 字体高度 */

private int mTextHeight;

public UnderlinedTextView(Context context, AttributeSet attrs) {

super(context, attrs);

init();

}

public UnderlinedTextView(Context context) {

super(context);

init();

}

private void init() {

mLPaint = new Paint();

mLPaint.setColor(Color.parseColor("#FFF1EDE4"));

mLPaint.setAntiAlias(true);

mLPaint.setDither(true);

mLPaint.setStrokeWidth(3);

}

@Override

protected void onLayout(boolean changed, int left, int top, int right,

int bottom) {

mCanvasWidth = getWidth() - paddingLeft - paddingRight;

super.onLayout(changed, left, top, right, bottom);

}

@Override

protected void onDraw(Canvas canvas) {

// TODO Auto-generated method stub

if (dataStr == null || dataStr.size() == 0) {

mText = getText().toString();

mPaint = getPaint();

mPaint.setColor(Color.parseColor("#FF62331D"));

// 以当前字体大小,衡量一个汉字的占位

float mPerCharLength = mPaint.measureText("A");

// 预估一行可显示多少个字符

mEstNumber = (int) (mCanvasWidth % mPerCharLength == 0 ? mCanvasWidth

/ mPerCharLength

: mCanvasWidth / mPerCharLength + 1);

// 文本总长度

mTextLen = mText.length();

// 字体高度

mTextHeight = getFontHeight();

offsetY = mTextHeight + paddingTop;

while (mStartIndex < mTextLen) {

getSingleLine();

}

}

if (dataStr != null) {

for (int i = 0; i < dataStr.size(); i++) {

drawLine(canvas, dataStr.get(i));

}

}

}

private void drawLine(Canvas canvas, String content) {

if (!TextUtils.isEmpty(content)) {

canvas.drawText(content, paddingLeft, offsetY, mPaint);

offsetY += paddingBottom;

canvas.drawLine(0, offsetY, mCanvasWidth, offsetY, mLPaint);

offsetY += paddingTop + mTextHeight;

}

}

/**

 * 根据预估,取出最合适的一行内容

 */

private void getSingleLine() {

// 每次文本截取的末尾位置

int mTempLength = mStartIndex + mEstNumber;

if (mTempLength > mTextLen) {

String lastContent = mText.substring(mStartIndex);

dataStr.add(lastContent);

mStartIndex = mTextLen;

return;

}

// 取出一行预估文本

String content = mText.substring(mStartIndex, mTempLength);

// 预估文本的占位空间

int length = (int) mPaint.measureText(content);

if (length > mCanvasWidth) {

// 如果预估的位置偏大,往回缩

while (length > mCanvasWidth) {

mTempLength--;

if (mTempLength > mStartIndex && mTempLength > mStartIndex) {

content = mText.substring(mStartIndex, mTempLength - 2);

length = (int) mPaint.measureText(content);

}

}

} else if (length < mCanvasWidth) {

// 如果预估的位置偏小,往外伸

while (length < mCanvasWidth) {

mTempLength++;

if (mTempLength < mTextLen && mTempLength > mStartIndex) {

// 临时保持处理结果

String mTempContent = mText.substring(mStartIndex,

mTempLength - 2);

int mTempLen = (int) mPaint.measureText(mTempContent);

// 提前预判处理后是否超出条件,如果超出,保持当前

if (mTempLen < mCanvasWidth) {

content = mTempContent;

length = mTempLen;

} else {

break;

}

}

}

}

// 保存取出的本行内容

dataStr.add(content);

// 重置初始位置

mStartIndex = mTempLength;

}

/**

 * 得到字体高度

 * 

 * @return

 */

private int getFontHeight() {

FontMetrics fm = mPaint.getFontMetrics();

return (int) Math.ceil(fm.descent - fm.ascent);

}

}

原文链接:http://www.apkbus.com/blog-192385-59653.html

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消