Android - Почему моя ось не рисует?

Далее предполагается отрисовка оси посередине экрана. Однако ничего не появляется. Я уверен, что это связано с моими путями.

@Override
protected void onDraw(Canvas canvas) {

    //Variables declared here temporarily for testing purposes
    int canterX = getWidth() /2;
    int centerY = getHeight() /2;
    int radius = 150;    

    Path verticalAxis = new Path();
    Path horizontalAxis = new Path();

    drawAxis();
}

private void drawAxis(Canvas canvas) {
    int axisLineThickness = 1;
    int verticalEndX;
    int verticalEndY;
    int horizontalEndX;
    int horizontalEndY;

    Paint axisPaint = new Paint();
    axisPaint.setColor(Color.WHITE);
    axisPaint.setStrokeWidth(axisLineThickness);

    double theta;

    for(int i = 90; i < 360; i += 180) {
        theta = toRadians(i);
        verticalEndX = centerX + (int) ((cos(theta)) * radius);
        verticalEndY = centerY + (int) ((sin(theta)) * radius);
        verticalAxis.moveTo(centerX, centerY);
        verticalAxis.lineTo(verticalEndX, verticalEndY);   
   }    
   canvas.drawPath(verticalAxis, axisColor);

   for(int i = 90; i < 360; i += 180) {
        theta = toRadians(i);
        horizontalEndX = centerX + (int) ((cos(theta)) * radius);
        horizontalEndY = centerY + (int) ((sin(theta)) * radius);
        horizontalAxis.moveTo(centerX, centerY);
        horizontalAxis.lineTo(verticalEndX, verticalEndY);   
   }    
   canvas.drawPath(horizontalAxis, axisColor);

}

Я знаю, что могу нарисовать ось, если добавлю следующее к вертикальным и горизонтальным циклам for соответственно:

Вертикальный цикл:

canvas.drawLine(centerX, centerY, verticalEndX, verticalEndY, paint);

Горизонтальный цикл:

canvas.drawLine(centerX, centerY, horizontalEndX, horizontalEndY, paint); 

Но я не хочу решать вопрос таким образом, я хочу исправить то, что не так с моими путями. Может ли кто-нибудь сказать мне, почему точки не добавляются к моему пути правильно? Петля должна проходить только дважды, что создает линию для каждой стороны оси. Т.е. Один цикл создает верхнюю часть вертикальной оси, а второй цикл создает нижнюю часть.

Как мне заставить мои пути создать эту полную строку, а затем нарисовать ее вне цикла?


person StartingGroovy    schedule 04.08.2011    source источник


Ответы (1)


Стиль Paint по умолчанию выглядит как FILL, так что, возможно, просто наличие линии на вашем пути сбивает с толку. Попробуйте установить его на STROKE:

axisPaint.setStyle(Paint.Style.STROKE);

См. раздел Paint.Style.

person brindy    schedule 04.08.2011
comment
Большое спасибо, это избавляет меня от необходимости беспокоиться о многих других путях, которые мне, возможно, пришлось бы исправлять. Вы случайно не знаете, почему это не работает с заливкой, не так ли? Или почему наличие линии на пути сбивает с толку? - person StartingGroovy; 05.08.2011
comment
Потому что, когда у вас есть только 2 точки на вашем пути, на самом деле нечего заполнять. :) Я полагаю, вы могли бы установить его на FILL_AND_STROKE на всякий случай, но это зависит от того, насколько явным вы хотите быть. - person brindy; 05.08.2011
comment
Могу я спросить, почему вы не хотите просто нарисовать пару линий? Поскольку вы все равно пересчитываете путь при каждом вызове drawAxis, я думаю, что drawLine будет немного быстрее и понятнее. - person brindy; 05.08.2011
comment
О, хорошо, да, я на самом деле попробую FILL_AND_STROKE, так как мне все равно придется сменить краску, чтобы заполнить что-то позже. Причина, по которой я не хотел сразу рисовать линию, заключалась в том, что я думал, что это проблема с тем, как мои пути добавляли точки. (Позже в методе onDraw у меня есть еще много путей, которые я настроил аналогичным образом и еще не тестировал их). Так что для оси я, вероятно, мог бы пойти дальше и просто нарисовать их, но не для других путей, которые у меня есть :) Я благодарен за помощь, Бринди! Надеюсь, вы часто проверяете вопросы по Android, потому что я уверен, что вернусь с новыми - person StartingGroovy; 05.08.2011