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
Благодаря ви много, това ме спестява да се тревожа за много други пътища, които може би трябваше да поправя. Случайно не знаеш защо не работи с fill нали? Или защо наличието на линия в пътя обърква нещата? - 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