顯示效果如下圖:
源起於專案中不少地方要用到的類似顯示--固定長度的textview,顯示的內容有多有少但需要平均分配顯示。所有就做了這麼一個控制元件,實現了一些基本功能。
具體實現檔案是在目錄:Utils/utilslib/src/main/java/com/max/utils/widget/AverageTextView.java
實現原理,繼承View重寫onDraw方法,計算文字寬度,得到每個文字間的空隙寬度,然後再繪製出每個文字。大致程式碼如下:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int width = getWidth();//控制元件寬度
int length = mText.length();//文字數量
while (width < txtWidth && mText.length() >= 0) {
mText = mText.substring(0, mText.length() - 1);
mPaint.getTextBounds(mText, 0, mText.length(), rAll);
txtWidth = rAll.width();
length = mText.length();
}
if (width < txtWidth) {
LogUtil.INSTANCE.e(TAG, "too many words");
return;//一個也放不下
}
if (length == 0) {
LogUtil.INSTANCE.e(TAG, "no word can be draw");
return;
}
int drawBaseY = txtHeight + VIEW_HEIGHT / 2;
int div = length == 1 ? 0 : (width - txtWidth) / (length - 1);
for (int i = 0; i < length; i++) {//迴圈繪文字
String temp = mText.substring(i, i + 1);
String passString = mText.substring(0, i);
Rect rect = new Rect();
mPaint.getTextBounds(passString, 0, passString.length(), rect);
int passWidth = rect.width() + div * i;
canvas.drawText(temp, passWidth, drawBaseY - rAll.bottom, mPaint);
}
}複製程式碼
另外還提供了一些簡單的基本操作方法,設定文字內容顏色及大小,同時可以設定文字與上下的間隔padding。
綜上記錄了此控制元件的簡單實現和基本使用,期待提出你寶貴的意見。