gpt4 book ai didi

android - 在自定义 View 中绘制时支持 RTL 语言环境

转载 作者:太空宇宙 更新时间:2023-11-03 13:52:00 48 4
gpt4 key购买 nike

当我使用 Canvas 在我的自定义 View 中绘制时,是否有一种简单的方法可以在不手动反转坐标计算的情况下为 RTL 语言环境进行绘制?

作为一个非常人为的例子,这是一个自定义 View ,在 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();

它在 LTR 和 RTL 布局中看起来完全一样:

enter image description here

我知道您可以使用 Matrix 或 canvas.scale() 来翻转 Canvas,但这对于更复杂的场景来说并不是一个可行的选择,例如在 Canvas 上绘制文本或其他 Drawable。

在 Canvas 上完成 RTL 绘图的最佳方法是什么?我真的必须计算 X 轴坐标的反转值吗?

最佳答案

据我所知,框架中没有任何东西可以自动处理转换 Canvas (在本例中用于绘图)或处理定位 View (用于布局)。换句话说,我必须自己使用 View.getLayoutDirection() 来完成这项工作。确定布局方向并进行相应计算。由于大多数绘图代码都使用对象的 left 位置,因此您通常可以执行类似的操作

if (isRtl) {
left = width - shapeWidth - left;
}

其中 width 是 Canvas 的宽度(或者您正在绘制的 Canvas 区域,例如,如果您已经减去左右填充消耗的量),并且 shapeWidth 是形状宽度。然后将形状宽度添加到 left 以获得 right 值。

类似的方法可用于布置 subview 。

关于android - 在自定义 View 中绘制时支持 RTL 语言环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34092275/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com