2017-01-16 3 views
0

У меня есть манометр, и я пытаюсь нарисовать на нем линию. (Фиксированное положение, не фиксированное значение)DrawArc на изображении, проблема с позиционированием

К сожалению, у меня нет опыта рисования. (И я думаю, что его трудно понять)

На данный момент он выглядит следующим образом: https://i.stack.imgur.com/5tkXEl.png

Как вы можете видеть, его не позиционируется правильно и я очень боюсь смотреть на него на других устройствах.

Код (класс расширяет View):

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.

ответ

0

Ну, у меня было несколько проблем с моей реализацией.

Основная проблема: фоновое изображение было «искажено», поэтому датчик не был действительно круглым.

Также: Код был довольно запутанным и слишком сложным.

Я оставляю вопрос здесь - возможно, это помогает кому-то в будущем.

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); 
} 
Смежные вопросы