我正在Android中实现这种文本翻转效果:
(请注意,动画时每条线如何分别剪切到各自的矩形边界)
我实际上已经实现了它(动画是一个屏幕录制),但是我使用私有(即@hide
)Layout#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
。