Android直播間消息流圖文混排

1592908032(1).png

剛收到需求無腦想了想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);
    }

···對象

基本就能夠解決上述問題。圖片

相關文章
相關標籤/搜索