我正在处理自定义视图(extends View)并使用该onDraw方法.
我已经走了一条箭:
ARROW_PATH = new Path();
ARROW_PATH.setLastPoint(20, 37);
ARROW_PATH.lineTo(14, 25);
ARROW_PATH.lineTo(18, 26);
ARROW_PATH.lineTo(17, 4);
ARROW_PATH.lineTo(23, 4);
ARROW_PATH.lineTo(22, 26);
ARROW_PATH.lineTo(26, 25);
ARROW_PATH.close();
Run Code Online (Sandbox Code Playgroud)
在不同的场景中,需要旋转它来描绘某个角度,我需要在视图中的特定坐标处绘制它.坐标也会根据场景而变化.
我试过玩,Canvas.rotate但是,当px和py值不相等时,看起来路径的方面是倾斜的(当箭头变得更窄更高时,箭头变得越来越高py > px.
我也试过Canvas.rotate(angle, 0, 0);,ARROW_PATH.moveTo(x, y);但看起来coords旋转了任意角度,很难计算出所需的坐标.
理想情况下,我想旋转路径而不是画布,但我认为API不支持此操作.
有人可以建议更好地解决这个问题吗?
谢谢,p.
Lum*_*mis 27
这是永久旋转路径的正确方法(在下一次应用矩阵之前,它将一直保持这种状态):
Matrix mMatrix = new Matrix();
RectF bounds = new RectF();
mPath.computeBounds(bounds, true);
mMatrix.postRotate(myAngle, bounds.centerX(), bounds.centerY());
mPath.transform(mMatrix);
Run Code Online (Sandbox Code Playgroud)
pst*_*ton 10
我找到了一种让它发挥作用的方法.
首先,我修改Path了它,使它居中
ARROW_PATH = new Path();
ARROW_PATH.setLastPoint(0, 17);
ARROW_PATH.lineTo(-6, 5);
ARROW_PATH.lineTo(-2, 6);
ARROW_PATH.lineTo(-3, -16);
ARROW_PATH.lineTo(3, -16);
ARROW_PATH.lineTo(2, 6);
ARROW_PATH.lineTo(6, 5);
ARROW_PATH.close();
Run Code Online (Sandbox Code Playgroud)
然后额外的翻译调用有助于找到绘图:
canvas.save();
canvas.rotate(angle, x, y);
canvas.save();
canvas.translate(x, y);
canvas.drawPath(ARROW_PATH, paint);
canvas.restore();
canvas.restore();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8145 次 |
| 最近记录: |