0

上記の「2番目の」画像を実現するためにペイントを「設定」する方法は?

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

ここに画像の説明を入力

最初の画像: 上記のコードの結果として、すべて黒のテキスト。

2 番目の画像: 背景色をより適切に調整 (ここで説明するためにグラフィック エディターで編集)

"31" は部分的に黒で部分的に白であることに注意してください (ただし、"36" は青になる可能性があるため、赤とのコントラストが優れている他の色にすることもできます)。

4

3 に答える 3

4

PixelXorXfermodeで描画できます。

于 2012-04-25T02:55:30.950 に答える
1

私が考えることができる唯一の解決策は、最初に onDraw に、実際のキャンバスと等しい変数 Canvas があり、次に数字を描画することです。

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

次に、赤い Rect を描画します

canvas.drawRect(myRect, redPaint);

それからあなたはあなたの線を引きます

canvas.drawline(mStartX,mStartY, mFinishX, mFinishY, myLinePaint);

onDraw の最後で、次のようなメソッドを呼び出します。

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 でグローバル Canvas が null でないことを確認する必要があり、そうであれば、グローバルを実際のものと等しくする必要があります。これが実際に機能するかどうかはわかりませんが、そうすることが考えられる唯一の解決策です。

于 2012-04-24T23:30:09.300 に答える
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);
于 2012-10-28T01:31:10.833 に答える