2016-09-29 191 views
0

在第一次我的遊戲,我用油畫繪製某些圈子從阿爾法0到255(它就像我自己製作fade_in動畫)帆布畫不光滑圓

但是,如果你在圖片中看到(這張照片拍攝在阿爾法230),從阿爾法0到254這些圈子不流暢!(點擊圖片看明白我的意思)

(只有當阿爾法成爲255圈變得光滑) enter image description here 有什麼問題,我怎樣才能解決這個問題?

我的代碼: 我有一個遊戲循環,即獲得帆布

canvas = gameView.getHolder().lockCanvas();

然後在我看來,起初我設置:

paintAlpha = 0; 
    paint = new Paint(); 
    paint.setAntiAlias(true); 
    paint.setFlags(Paint.ANTI_ALIAS_FLAG); 
    paint.setStyle(Paint.Style.FILL); 
    paint.setStrokeJoin(Paint.Join.ROUND); 
    paint.setStrokeCap(Paint.Cap.ROUND); 
    paint.setAlpha(paintAlpha); 
    paint.setColor(Color.parseColor(color)); 

然後在每一個循環(每個蜱)我這樣做:

if(paintAlpha < 255) { 
     paintAlpha+=1; 
     paint.setAlpha(paintAlpha); 
    } 
    canvas.drawCircle(cx, cy, currentRadius, paint); 

解決方案: 感謝@nitesh。 問題是因爲不能反其別名爲畫布surfaceView的(在視圖你沒有這個問題,我不知道爲什麼) 通過使用位圖和借鑑,並最終由畫布繪製位圖時,問題解決了(而不是直接在畫布上繪製)

+0

循環?你是什​​麼意思? – pskink

+0

我說,這是一場遊戲,我的意思是遊戲線程循環 – MehDi

回答

6

設置以下屬性接近此畫對象

paint.setAntiAlias(true); 

爲了更好的理解和其他方法請參考以下鏈接 https://medium.com/@ali.muzaffar/android-why-your-canvas-shapes-arent-smooth-aa2a3f450eb5#.p9iktozdi

從文章

先畫一個位圖,如果:
- 你需要保留的圖像。
- 您需要繪製透明像素。
- 您的形狀不經常改變的和/或需要耗時的操作。
使用抗鋸齒繪製平滑的邊緣。
避免對位圖重新繪製如果可能的話,否則,重繪之前清除位圖。

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    if (bitmap == null) { 
     bitmap = Bitmap.createBitmap(200, 
            200, 
            Bitmap.Config.ARGB_8888); 
     bitmapCanvas = new Canvas(bitmap); 
    } 
    bitmapCanvas.drawColor(
       Color.TRANSPARENT, 
       PorterDuff.Mode.CLEAR); //this line moved outside if 
    drawOnCanvas(bitmapCanvas); 
    canvas.drawBitmap(bitmap, mLeftX, mTopY, p); 
} 

protected void drawOnCanvas(Canvas canvas) { 
    canvas.drawCircle(mLeftX + 100, mTopY + 100, 100, p); 
} 

enter image description here

+0

我也設置它,它不幫助 – MehDi

+0

看到我更新的答案,並按照文章 – Nitesh

+0

中的方法,你的意思是,當我想繪製它的alpha值小於255的東西時,我需要先在它下面繪製一個位圖? – MehDi

1

您可以通過

paint.setFlags(Paint.ANTI_ALIAS_FLAG); 

paint.setAntiAlias(true); 
+0

我還設置它,它不利於 – MehDi

+0

提供更多的代碼來檢查哪裏出了問題 –

+0

好吧,我會後的一些代碼 – MehDi