图像上的 DrawArc,定位问题
DrawArc on image, positioning issue
我有一个可绘制的仪表,我试着在上面画一条线。 (固定位置,非固定值)
很遗憾,我没有任何绘画经验。 (而且我觉得很难理解)
目前看起来是这样的:
https://i.stack.imgur.com/5tkXEl.png
如您所见,它的位置不对,我很害怕在其他设备上看到它。
代码(Class 扩展视图):
private void init(Context context) {
bounds = new Rect();
gaugeBackground = ContextCompat.getDrawable(context, R.drawable.gauge);
arcPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
arcPaint.setColor(Color.RED);
arcPaint.setStyle(Paint.Style.STROKE);
arcPaint.setStrokeWidth(7f);
}
protected void onDraw(Canvas canvas) {
canvas.getClipBounds(bounds);
gaugeBackground.setBounds(bounds);
gaugeBackground.draw(canvas);
float padding = 5;
float size = getWidth() < getHeight() ? getWidth() : getHeight();
float width = size - (2 * padding);
float height = size - (2 * padding);
float radius = (width < height ? width /2 : height /2);
float rectLeft = (width /2) - radius + padding;
float rectTop = (getHeight() /2) - radius + padding;
float rectRight = (getWidth() /2) - radius + padding + width;
float rectBottom = (getHeight() /2) - radius + padding + height;
RectF mRect = new RectF(rectLeft, rectTop, rectRight, rectBottom);
canvas.drawArc(mRect, 119f, 300f, false, arcPaint);
}
有人可以提供有用的信息吗?我希望我终于得到了全部 RectF/Drawing 东西..
哦,好吧,我的实施遇到了多个问题。
主要问题:背景图片是 'warped',所以仪表不是真的圆。
另外:代码有点乱,太复杂了。
我把问题留在这里 - 也许它对将来的人有帮助。
protected void onDraw(Canvas canvas) {
canvas.getClipBounds(bounds);+
//0.86 == Aspect Ratio of the Background
gaugeBackground.setBounds(0, 0, bounds.right, (int) Math.round(bounds.bottom * 0.86));
gaugeBackground.draw(canvas);
float padding = 3;
float size = getWidth() < getHeight() ? getWidth() : getHeight();
float width = size - (2 * padding);
float height = size - (2 * padding);
RectF mRect = new RectF(padding, padding, width, height);
canvas.drawArc(mRect, 134f, 271f, false, arcPaint);
}
我有一个可绘制的仪表,我试着在上面画一条线。 (固定位置,非固定值)
很遗憾,我没有任何绘画经验。 (而且我觉得很难理解)
目前看起来是这样的: https://i.stack.imgur.com/5tkXEl.png
如您所见,它的位置不对,我很害怕在其他设备上看到它。
代码(Class 扩展视图):
private void init(Context context) {
bounds = new Rect();
gaugeBackground = ContextCompat.getDrawable(context, R.drawable.gauge);
arcPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
arcPaint.setColor(Color.RED);
arcPaint.setStyle(Paint.Style.STROKE);
arcPaint.setStrokeWidth(7f);
}
protected void onDraw(Canvas canvas) {
canvas.getClipBounds(bounds);
gaugeBackground.setBounds(bounds);
gaugeBackground.draw(canvas);
float padding = 5;
float size = getWidth() < getHeight() ? getWidth() : getHeight();
float width = size - (2 * padding);
float height = size - (2 * padding);
float radius = (width < height ? width /2 : height /2);
float rectLeft = (width /2) - radius + padding;
float rectTop = (getHeight() /2) - radius + padding;
float rectRight = (getWidth() /2) - radius + padding + width;
float rectBottom = (getHeight() /2) - radius + padding + height;
RectF mRect = new RectF(rectLeft, rectTop, rectRight, rectBottom);
canvas.drawArc(mRect, 119f, 300f, false, arcPaint);
}
有人可以提供有用的信息吗?我希望我终于得到了全部 RectF/Drawing 东西..
哦,好吧,我的实施遇到了多个问题。
主要问题:背景图片是 'warped',所以仪表不是真的圆。
另外:代码有点乱,太复杂了。
我把问题留在这里 - 也许它对将来的人有帮助。
protected void onDraw(Canvas canvas) {
canvas.getClipBounds(bounds);+
//0.86 == Aspect Ratio of the Background
gaugeBackground.setBounds(0, 0, bounds.right, (int) Math.round(bounds.bottom * 0.86));
gaugeBackground.draw(canvas);
float padding = 3;
float size = getWidth() < getHeight() ? getWidth() : getHeight();
float width = size - (2 * padding);
float height = size - (2 * padding);
RectF mRect = new RectF(padding, padding, width, height);
canvas.drawArc(mRect, 134f, 271f, false, arcPaint);
}