2010-03-11 26 views
0

我在看一個子類以下程序:的onDraw()引發的,但結果並沒有顯示

它計算點組成的線陣列,然後擦除以前的線,然後繪製新線(影響是指用多條線繪製的像素寬度)。該線是您的基本鐘形曲線,通過方差和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()在循環中,仍然沒有喜悅

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); 

回答

0

是不是你想調用無效(如一個MapView)取代了drawLines()到視圖強制重裝?

YourView.invalidate()(或者postInvalidate(),這取決於你在哪裏:主要sthread與否) here is the detail

+0

實際上,它比這更簡單。第一個onDraw()命令從不會在onStart()結束之前發生。由於我試圖獲取視圖的寬度和高度來初始化點數組,並且它絕對拒絕這麼做,直到onStart()之後,我才被這個問題驅動。 我被使用onDraw()寫入canvas()的例子拋棄了,但當我看到第一個onDraw()從來沒有發生時,燈光終於明白了。您可以在不知道視圖大小的情況下設置畫布)並「繪製」到您心中的內容,但直到onStart()結束時纔會_renders_。 – 2010-03-12 12:31:24

1

我試圖從onCreate()onStart()中編寫。視圖及其畫布從來沒有實際渲染過,直到onStart()結束。

相關問題