Kar*_*uri 5 android android-custom-view right-to-left
当我使用 Canvas 在我的自定义视图中绘制时,是否有一种简单的方法可以在不手动反转坐标计算的情况下为 RTL 区域设置绘制?
作为一个非常人为的例子,这是一个自定义视图,在 onDraw() 中包含以下内容:
int w = getWidth();
int h = getHeight();
canvas.save();
mPaint.setColor(Color.RED);
canvas.drawRect(0, 0, w / 2, h, mPaint);
mPaint.setColor(Color.BLUE);
canvas.drawRect(w / 2, 0, w, h, mPaint);
int size = h / 4;
mPaint.setColor(Color.GREEN);
int paddingEnd = ViewCompat.getPaddingEnd(this);
canvas.translate(-paddingEnd, getPaddingTop());
canvas.drawRect(w - size, 0, w, size, mPaint);
canvas.restore();
Run Code Online (Sandbox Code Playgroud)
它在 LTR 和 RTL 布局中看起来完全相同:
我知道您可以使用矩阵或 canvas.scale(),但是对于更复杂的场景,例如在画布上绘制文本或其他可绘制对象,这不是一个可行的选择。
在 Canvas 上完成 RTL 绘图的最佳方法是什么?我真的必须计算 X 轴坐标的倒置值吗?
据我所知,框架中没有任何东西可以自动处理画布变换(用于绘图,如本例所示)或处理定位视图(用于布局)。换句话说,我必须自己做这项工作View.getLayoutDirection()来确定布局方向并进行相应的计算。left由于大多数绘图代码都与对象的位置一起工作,因此您通常可以执行类似的操作
if (isRtl) {
left = width - shapeWidth - left;
}
Run Code Online (Sandbox Code Playgroud)
其中width是画布的宽度(或您正在绘制的画布区域,例如,如果您已经减去左右填充消耗的量), 是shapeWidth形状宽度。然后添加形状宽度left以获得right值。
类似的方法可用于布置子视图。
| 归档时间: |
|
| 查看次数: |
1800 次 |
| 最近记录: |