剛收到需求無腦想了想TextView加上ImageSpan就能夠完美解決這個問題,作的時候發現不對,若是用戶等級有100級,就要放置最少100張圖片到APK裏面,若是區分男女不一樣級別展現背景色不一致或者樣式不一致,那就是災難。canvas
怎麼辦?ide
若是用多個View來實現,複雜度直線上升,單行文本沒有問題,多行文本時候就是災難,須要考慮的東西太多。spa
這時候想到以前自定義ImageSpan,讓圖片和文本對齊時候作的一些小操做,裏面有Canvas對象,靈光乍現,直接在ImageSpan的onDraw方法裏面繪製要顯示的數字就能夠了。rest
上代碼:
···code
@Override public void draw(@NonNull Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, @NonNull Paint paint) { // image to draw Drawable b = getDrawable(); int halfWidth = (int) (b.getIntrinsicWidth()/2f); // font metrics of text to be replaced Paint.FontMetricsInt fm = paint.getFontMetricsInt(); int transY = (y + fm.descent + y + fm.ascent) / 2 - b.getBounds().bottom / 2; canvas.save(); canvas.translate(x, transY); b.draw(canvas); canvas.restore(); canvas.drawText(level, x + halfWidth, y, levelTextPaint); }
···對象
基本就能夠解決上述問題。圖片