当文本溢出时,描边会在TextView中被剪切

时间:2018-04-01 10:29:22

标签: android android-canvas

前奏

我正在设置自定义程式化文本,使用app:autoSizeTextType="uniform"动态更改其文本大小,并在其onDraw方法中为其添加两个不同的笔划。在两个不同的笔划中,一个用作主要轮廓,另一个用作文本和主要轮廓之间的填充。

我遇到的问题

由于我使用app:autoSizeTextType="uniform"文本很可能到达TextView的末尾,但由于我正在为此添加笔划,因此会剪切笔划。将android:clipChildren="false"添加到父级也不起作用。

代码

@Override public void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    int restoreColor = this.getCurrentTextColor();

    if (strokeColor != null) {
        // Outer outline
        TextPaint outlinePaint = this.getPaint();
        outlinePaint.setStyle(Paint.Style.STROKE);
        outlinePaint.setStrokeJoin(strokeJoin);
        outlinePaint.setStrokeMiter(strokeMiter);
        this.setTextColor(ContextCompat.getColor(getContext(), R.color.colorLighterGrey));
        outlinePaint.setStrokeWidth((getTextSize() / 10) + 2);
        super.onDraw(canvas);
        // Middle padding 
        TextPaint paddingPaint = this.getPaint();
        paddingPaint.setStyle(Paint.Style.STROKE);
        paddingPaint.setStrokeJoin(strokeJoin);
        paddingPaint.setStrokeMiter(strokeMiter);
        this.setTextColor(strokeColor == restoreColor ? ContextCompat.getColor(getContext(), R.color.colorLighterGrey) : strokeColor);
        paddingPaint.setStrokeWidth(getTextSize() / 10);
        super.onDraw(canvas);

        this.setTextColor(restoreColor);
        TextPaint paint = this.getPaint();
        paint.setStyle(Paint.Style.FILL);
        super.onDraw(canvas);
    }
}

输出

Without layout Bounds enabled With layout Bounds enabled

P.S。对这种操纵完全不熟悉,任何帮助都会受到赞赏。还看了Draw outside bounds

0 个答案:

没有答案