onDraw()已触发,但结果未显示

时间:2010-03-11 02:00:40

标签: android drawing

我在视图的子类中有以下例程:

它计算构成一条线的点数组,然后擦除前一条线,然后绘制新线(影响指的是用多条线绘制的像素宽度)。该线是您的基本钟形曲线,由方差和x因子挤压或拉伸。

不幸的是,屏幕上没有显示任何内容。使用drawPoint()并且没有数组工作的先前版本,我已经验证正确加载了数组内容,我可以看到我的onDraw()被触发了。

为什么它可能不被绘制的任何想法?提前致谢!

 protected void drawNewLine( int maxx, int maxy, Canvas canvas, int impact, double  variance,  double xFactor, int color) {
  // impact = 2 to 8; xFactor between 4 and 20; variance between 0.2 and 5
  double x = 0;
  double y = 0;
  int cx = maxx / 2;
  int cy = maxy / 2;
  int mu = cx;
  int index = 0;
  points[maxx<<1][1] = points[maxx<<1][0];
  for (x = 0; x < maxx; x++) {
   points[index][1] = points[index][0];
   points[index][0] = (float) x;
   Log.i(DEBUG_TAG, "x: " + x);
   index++;
   double root = 1.0 / (Math.sqrt(2 * Math.PI * variance));
   double exponent = -1.0 * (Math.pow(((x - mu)/maxx*xFactor), 2) / (2 * variance));
   double ePow = Math.exp(exponent);
   y = Math.round(cy * root * ePow);
   points[index][1] = points[index][0];
   points[index][0] = (float) (maxy - y - OFFSET);

   index++;
  }
  points[maxx<<1][0] = (float) impact;

  for (int line = 0; line < points[maxx<<1][1]; line++) {
   for (int pt = 0; pt < (maxx<<1); pt++) {
    pointsToPaint[pt] = points[pt][1];
   }
   for (int skip = 1; skip < (maxx<<1); skip = skip + 2)      
                          pointsToPaint[skip] = pointsToPaint[skip] + line;
   myLinePaint.setColor(Color.BLACK);
   canvas.drawLines(pointsToPaint, bLinePaint); // draw over old lines w/blk
  } 

  for (int line = 0; line < points[maxx<<1][0]; line++) {
   for (int pt = 0; pt < maxx<<1; pt++) {
    pointsToPaint[pt] = points[pt][0];
   }
   for (int skip = 1; skip < maxx<<1; skip = skip + 2)
                           pointsToPaint[skip] = pointsToPaint[skip] + line;
   myLinePaint.setColor(color);
   canvas.drawLines(pointsToPaint, myLinePaint); / new color
  }

 }

更新:用循环中的drawPoint()替换drawLines(),仍然没有喜悦

    for (int p = 0; p<pointsToPaint.length; p = p + 2) {
      Log.i(DEBUG_TAG, "x " + pointsToPaint[p] + " y " + pointsToPaint[p+1]);
      canvas.drawPoint(pointsToPaint[p], pointsToPaint[p+1], myLinePaint);
    }
///         canvas.drawLines(pointsToPaint, myLinePaint);

2 个答案:

答案 0 :(得分:1)

我试图在onCreate()onStart()内写字。在onStart()结束之前,View及其Canvas实际上从未实际呈现过。

答案 1 :(得分:0)

您是不是想调用invalidate(如mapview)来强制视图重新加载?

YourView.invalidate()(或者postInvalidate(),取决于你的位置:主要是否为sthread) here is the detail