目標は、複合形状を作成し、エンボス効果を追加することです。以下の図のような形状をうまく作成できます。
woodPaint = new Paint();
woodPaint.setAntiAlias(true);
woodBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.wood);
woodShader = new BitmapShader(woodBitmap, Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);
woodPaint.setShader(woodShader);
...
@Override
protected void onDraw(Canvas canvas) {
canvas.drawCircle(handleX, radius, radius, woodPaint);
canvas.drawRoundRect(baseRectF, 25, 25, woodPaint);
super.onDraw(canvas);
}
画像:
次に、EmbossMaskFilter を追加します
paintEmboss = new EmbossMaskFilter(new float[] { 1, 1, 1 }, 0.1f, 8f, 5f);
woodPaint.setMaskFilter(paintEmboss);
画像:
ご覧のとおり、エンボス マスクは 2 つの形状に別々に適用されます。形状をまとめてエンボスをオブジェクト全体に適用するにはどうすればよいですか? xfer モードをポーターダフのフレーバーに設定しようとしましたが、エンボス マスクが各シェイプに個別に適用されるという事実には影響しません。
助けてくれてありがとう!
編集: Orabîg で示されているように、エンボス フィルターを設定したペイントで 1 つのパスを描画する必要があります。注: setMaskFilter() メソッドは、ハードウェア アクセラレーションがオンになっていると機能しない数少ないメソッドの 1 つです。アクティビティのハードウェア アクセラレーションを無効にすることで、ジェリー ビーンを実行している電話で発生していた問題を解決しました。選択した任意のレベルでハードウェア アクセラレーションを無効にすることができます。
- 応用
- アクティビティ
- 窓
- 意見
乾杯!