2012-04-24 4 views
0

上記の「2番目の」イメージを達成するためにペイントを設定するにはどうすればよいですか?アンドロイド:背景コントラストのDrawText

paint.setColor(Color.BLACK); 
canvas.drawText(strValue, x, y, paint); 

enter image description here

まず画像:上記そのコードの結果として全黒のテキスト。

第二画像:「31」は、部分的に黒と部分的に白である(それはへのより良好なコントラストを持つ他の色かもしれないことを(ちょうどここに説明するために、グラフィックエディタで編集)色

注意をbackgroudのためのより良いconstrat赤、 "36"は青になります)。

+0

限りあなただけの数の半分にスタイルを適用することはできませんので、私はそれを達成する方法はありません知っているように、私はあなたが、あなたの青い円をあなたの赤い矩形でcontrastantする色を使用することをお勧めなどあなたのキャンバスのバッグカラー。 – Raykud

答えて

4

PixelXorXfermodeで描画できます。

+1

解決済み:paint.setXfermode(new PixelXorXfermode(Color.WHITE)); – Christian

1

私は考えることができる唯一の解決策は、最初のごonDrawに、あなたが実際のものと等しい変数のキャンバスを持っていると、あなたはあなたの番号を描く、

paint.setColor(Color.BLACK); 
canvas.drawText(strValue, x, y, paint); 

、あなたが赤のRect

を描くということです
canvas.drawRect(myRect, redPaint); 

、あなたは

とあなたのonDra外の一番最後に、あなたの線を引きます

public void myMethod(){ 
    Paint paint = new Paint(); 
    paint.setColor(Color.BLACK); 
    this.canvas.drawText(strValue, x, y, paint); 
    //here you will define the area that you will mark as dirty 
    //(wich can have the same values as your red Rect) 
    Rect myRect = new Rect(); 
    myRect.set(x0,y0,x1,y1); 
    //and finally here you invalidate ONLY the red area 
    this.canvas.invalidate(myRect); 
} 

注:これはあなたのonDrawあなたはグローバルなキャンバスが nullでなく、もしそうなら、あなたが実際にあなたのグローバルに等しいことを確認の上、そのが必要になりますが、このようなメソッドを呼び出して、ワット これが実際に動作するかどうかはわかりませんが、そうすることができる唯一の解決策です。

0

AntiAliasが設定されている場合、PixelXorXfermodeは適切な方法ではありません。

赤い四角形が表示される場合は、canvas.clipRectを使用する方が良いと思います。この

textpaint.setColor(black); 
canvas.drawText(str,x,y,textpaint); 

Rect oldClipRect = canvas.getClipBounds(); 
canvas.clipRect(rcRed,Op.REPLACE); 
textpaint.setColor(white); 
canvas.drawText(str,x,y,textpaint); 
canvas.clipRect(oldclipRect,Op.REPLACE); 
関連する問題