为什么我的(自定义视图)画布上没有画线?

时间:2013-06-18 13:40:31

标签: android android-canvas ondraw

我正在尝试从float[]中的点绘制线条。我知道点到达drawLines()函数,因为我在这里记录它们:

  

抽奖点数:154.18182:784.8889:215.27272:677.3333:   215.27272:677.3333:337.45453:462.22217:337.45453:462.22217:276.36365:569.7778:276.36365:569.7778:398.54544:354.66663:398.54544:354.66663:154.18182:784.8889:154.18182:784.8889:337.45453:462.22217:337.45453:462.22217:520.7273:139.55554:520.7273: 139.55554:581.8182:32.0:581.8182:32.0:398.54544:354.66663:398.54544:354.66663:154.18182:784.8889

* 注意:不要注意重复点 - 第一行的终点是第二行的起点。 drawLines函数需要四个连续点,因此重复点。

我的widthheight有效integersWidth = 672 Height = 968

我的onDraw功能:

请注意,我已经尝试了一些现已注释掉的内容。我的背景是灰色的,所以当Color.RED线被绘制时,它应该是可见的。

@Override
public void onDraw(Canvas canvas){
    //setWillNotDraw(true);

    Log.d(TAG, "DRAW DAMNIT!!!");
    Log.d(TAG, "Width = " + (int) width + " Height = " + (int)height);

    paint = new Paint();
    paint.setStyle(Style.STROKE);
    paint.setStrokeWidth(4);
    paint.setColor(Color.RED);
    //paint.setAntiAlias(true);
    //paint.setShadowLayer(4, 2, 2, 0x81000000);

    Bitmap bitmap = Bitmap.createBitmap((int)width, (int)height, Bitmap.Config.ARGB_8888);
    canvas = new Canvas(bitmap);

    String drawPointsGo = "";
    float[] drawPoints = new float[points.size()];
    for(int i=0; i<points.size(); i++){
        Float f = points.get(i);
        drawPoints[i] = (float) (f != null ? f : 0.0);
        drawPointsGo = drawPointsGo + " : " + drawPoints[i];
    }
    Log.d(TAG, "Draw Points: " + drawPointsGo);

    canvas.drawLines(drawPoints, paint);
}

我的XML:

<za.co.widge.test.linegraph.LineGraphView 
    android:id="@+id/linechart"
    android:layout_width="wrap_content"
    android:layout_height="0dp"
    android:background="#444"
    android:padding="16dp"
    android:layout_weight="1"
    />

结果: 灰色块出现在手机屏幕上,但没有画出红线。

为什么我的(自定义Viewcanvas上没有任何内容?

1 个答案:

答案 0 :(得分:1)

删除这一行:

Bitmap bitmap = Bitmap.createBitmap((int)width, (int)height, Bitmap.Config.ARGB_8888);
canvas = new Canvas(bitmap);

您正在覆盖传递给onDraw方法的画布实例,并使用屏幕外(位图支持),因此屏幕上没有任何内容。