2013-08-08 7 views
7

私はこのような形をカスタムビューのonDrawメソッドで描画しようとしています。キャンバスに「穴」を描く

残念ながら、(Color.Transparentで円を描くことによって)キャンバス上の透明円を「切り取る」ことはできません。

シェイプを別のビットマップに描画してから、onDrawで提供されるキャンバスに描画する必要がありますか?それとももっと簡単な方法ですか?

mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 
mPaint.setColor(Color.TRANSPARENT); 
mPaint.setStrokeWidth(4); 
mPaint.setStyle(Style.STROKE); 

canvas.drawColor(getResources().getColor(R.color.black_overlay)); 
canvas.drawCircle(-3*(this.getBottom()-this.getTop())/4, (this.getTop()+this.getBottom())/2, this.getBottom()-this.getTop(), mPaint); 

PS:ここ

Custom shape

は、私が試したコード(Color.WHITEで動作)であるColor.WHITEを使用している間、私は私が望んでいた正確な形状を得た: Result achieved with Color.WHITE

解決策

@Override 
public void onDraw(Canvas canvas) 
{ 
    mBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888); 
    mCanvas = new Canvas(mBitmap); 
    mCanvas.drawColor(getResources().getColor(R.color.black_overlay)); 
    mCanvas.drawCircle(-3*(getHeight())/4, (getHeight())/2, getHeight(), mPaint); 
    canvas.drawBitmap(mBitmap, 0, 0, null); 
} 
with 
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 
    mPaint.setStrokeWidth(4); 
    mPaint.setStyle(Style.STROKE); 
    mPaint.setXfermode(new PorterDuffXfermode(Mode.CLEAR)); 

注:createBitampと新しいキャンバスをonDrawメソッドから移動する必要があります。

+0

は、手動ではあまりにも複雑であることを見れば画像を使用して、うまく –

+0

ColorTransparentとは何ですか?あなたが試したことのいくつかのコードを投稿してみませんか?これが役立つかどうかをご覧ください - http://stackoverflow.com/questions/9988671/android-r-color-transparent-notfully-transparent – Sundeep

+0

Color.TRANSPARENTはアンドロイド定数です。 – Tryum

答えて

9
+0

私は4つのリンクのうち3つを見直しましたが、もう一度試してみると、別のビットマップを使って私の穴を穿孔することができました。 この回答を受け入れるか、自分の最終的なコードで私自身の回答をしてください。 – Tryum

+3

@Tryumあなたの決定です。あなたは私の答えを受け入れて+2評判のポイントを受け取るか、あなたのコードで自分の答えを書いて48時間後に受け入れることができます(あなたは評判を得られません)。もう1つの解決策もあります:あなたの答えを書いて、私のものを受け入れてください。ありがとう、 – TN888

関連する問題