【问题标题】:Android - Why doesn't my axis draw?Android - 为什么我的轴不绘制?
【发布时间】:2011-10-20 10:18:39
【问题描述】:

下面应该是在屏幕中间画一个轴。然而,什么也没有出现。我很肯定这与我的路径有关。

@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 循环中,我可以绘制轴:

垂直 For 循环:

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

水平 For 循环:

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

但我不想以这种方式解决问题,我想纠正我的路径有什么问题。谁能告诉我为什么这些点没有正确添加到我的路径中?循环应该只经过两次,为轴的每一侧创建一条线。 IE。一个循环创建垂直轴的顶部,第二个循环创建底部。

如何让我的路径创建完整的线,然后将其绘制到循环之外?

【问题讨论】:

    标签: android path line draw


    【解决方案1】:

    Paint 的默认样式似乎是 FILL,所以可能只是在路径中有一条线会让人感到困惑。尝试将其设置为 STROKE:

    axisPaint.setStyle(Paint.Style.STROKE);
    

    Paint.Style

    【讨论】:

    • 非常感谢,这让我不必担心我可能不得不修复的许多其他路径。你不知道为什么它不适用于填充吗?或者为什么在路径中有一条线会让人困惑?
    • 因为当您的路径中只有 2 个点时,实际上没有什么可填充的。 :) 我想您可以将其设置为 FILL_AND_STROKE 以防万一,但这取决于您想要的明确程度。
    • 请问您为什么不想简单地画几条线?由于您无论如何都要在每次调用 drawAxis 时重新计算路径,我认为 drawLine 会更快更清晰。
    • 哦,好吧,是的,我实际上会尝试FILL_AND_STROKE,因为无论如何我必须更改油漆以填充某些东西。我不想马上画线的原因是因为我认为这是我的路径如何添加点的问题。 (稍后在 onDraw 方法中,我有更多以类似方式设置的路径,但尚未对其进行测试)。因此,对于轴,我可能会继续绘制它们,但不适用于我拥有的其他路径:) 我感谢布林迪的帮助!希望您经常检查 Android 问题,因为我相信我会回来更多
    猜你喜欢
    • 2017-03-21
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多