簡體   English   中英

如何在Android中清理畫布上的繪制路徑

[英]How do i clean drawn path on canvas in android

我的Android項目需要一些幫助。 我有一個畫布,並用一些位圖填充它。 而且我有一個指針在畫布上畫了一條線。 我的問題是如何清理我之前畫過的線? 我應該在畫布上調用什么方法? 我已經嘗試過Canvas.drawColor()invalidate() ,這是行不通的。

以及Canvas.drawColor()的功能是什么,請幫助我解決問題。 提前致謝

更新! 如果我做這樣的代碼:

@Override
protected void onDraw(Canvas canvas) {
    // fills the canvas with black
    canvas.drawColor(Color.BLACK);

    canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);

    canvas.drawPath(mPath, p);

    obaby.draw(canvas);
}

我在代碼中將invalidate()放在哪里? 如果我想使用按鈕清除畫布,應該使用什么代碼?

更新!

我這樣寫了onDraw:

@Override
protected void onDraw(Canvas canvas) {
    canvas.drawColor(Color.BLACK);  
    if(letsdraw){
        canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
        canvas.drawPath(mPath, p);
        obaby.draw(canvas);
    }
}

重置按鈕中的方法是這樣的:

public void rst(){
    letsdraw = false;
    invalidate();
    Log.v("tag", "this method called");

}

但是當我調用該方法時畫布上沒有任何變化。 我在上面的代碼上寫錯了嗎?

使您的邏輯像這樣。 在一定條件下在Canvas上畫線。 檢查是否要畫線,然后畫線。

骨架代碼-

@Override
    protected void onDraw(Canvas canvas)
    {
        if(needToDrawLine)
        {
            //draw the line
        }
        // Other drawing stuff
    }

現在只需更新您的needToDrawLine變量並調用invalidate() 您將得到結果。 讓我知道它是否有效。

更新:

每當您調用invalidate() onDraw()方法都會調用。 因此, onDraw()都會執行。 辦法是,您必須防止它繪制某些零件。 要重繪整個視圖時,您將調用invalidate() ,例如-用於清除畫布的按鈕。

  • canvas.drawColor(Color.BLACK); 這條線將您的整個視圖清除為黑色。

  • canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); 這條線在(0,0)處繪制位圖。

  • canvas.drawPath(mPath, p); 這條線繪制路徑mPath

  • obaby.draw(canvas); 其他一些對象繪制自身。

現在-例如,您想在按下按鈕時清除屏幕。 只需初始化變量即可繪制所有內容。 並在按鈕單擊中更新變量。

public boolean drawEverything = true;

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawColor(Color.BLACK);
        if(drawEverything)
        {
            canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
            canvas.drawPath(mPath, p);
            obaby.draw(canvas);
        }
    }

    public void buttonClicked( ... )
    {
        drawEverything = false;
    }

我在我的活動中使用這種激怒的油漆

            mBitmap.eraseColor(Color.TRANSPARENT);
            mPath.reset();
            mView.invalidate();             

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM