强制剪辑TextView的各行

时间:2018-07-19 21:55:20

标签: android android-canvas textview

我正在Android中实现这种文本翻转效果:

Rolling text with clipping line by line

(请注意,动画时每条线如何分别剪切到各自的矩形边界)

我实际上已经实现了它(动画是一个屏幕录制),但是我使用私有(即@hideLayout#drawText方法来实现,这是唯一一种将绘图限制为特定方法的方法。线范围-通过反射:

// ... (from a TextView subclass)

try {
    mMethod = Layout.class.getDeclaredMethod("drawText", Canvas.class, int.class, int.class);
    mMethod.setAccessible(true);
} catch (NoSuchMethodException e) {
    //...
}

// ...

@Override
protected void onDraw(Canvas canvas) {
    for (int i = 0; i < getLineCount(); i++) {
        canvas.save();
        getLineBounds(i, mClipRect);
        canvas.clipRect(mClipRect);
        canvas.translate(getCompoundPaddingLeft(), getCompoundPaddingTop());
        try {
            mMethod.invoke(getLayout(), canvas, i, i);
        } catch (IllegalAccessException | InvocationTargetException e) {
            // ...
        }
        canvas.restore();
    }
}

我想知道是否有更好,更安全的方法来实现逐行绘制和剪切(也就是说,除了将文本分成单独的视图之外)。同样,进入低级并直接使用Canvas#drawText并不是一个真正的选择,因为我需要换行和跨文本支持,而所有这些我都可以使用Layout

0 个答案:

没有答案