これは私の最初のStackoverflowに関する質問です。私はある点の周りに放射状の花の効果を描こうとしていて、RadialGradientとGradientDrawableを見つけました。しかしどちらも完全に解決策を提示していません。1つのRadialGradientのサイズ、位置、色を設定する方法、GradientDrawableでXferModeを設定する方法
新しいRadialGradientは、メモリのすべてのフレームごとに蓄積しかし:
//global
PorterDuffXfermode xferMode = new PorterDuffXfermode(PorterDuff.Mode.ADD);
Paint mainP = new Paint();
Paint whiteP = new Paint();
whiteP.setColor(Color.WHITE);
RadialGradient gradient;
// in a drawing method with a canvas
gradient = new RadialGradient((int) x, (int) y, tempRadius, mainP.getColor(),
0x00000000, Shader.TileMode.CL
mainP.setShader(gradient);
mainP.setXfermode(xferMode);
canvas.drawCircle((int) x, (int) y, tempRadius, mainP);
gradient = new RadialGradient((int) x, (int) y, tempRadius/2, whiteP.getColor(),
0x00000000, Shader.TileMode.CLAMP);
whiteP.setXfermode(xferMode);
whiteP.setShader(gradient);
canvas.drawCircle((int) x, (int) y, tempRadius/2, whiteP);
これは期待どおりの結果が得られます:ここでは
は、私は今、図面をやっている方法ですドット。後で明らかに問題になるのは誰か。そのクラスの唯一のパブリックなものはコンストラクタです。したがって、RadialGradientでできることは、新しいサイズ、位置、または色が必要になるたびに新しいものを作成することです。このようにしたいのは、ペイントオブジェクトに描画する描画オブジェクトにグラデーションを割り当てるためです。このオブジェクトを使用すると、setXferMode()を使用できます。
GradientDrawableを使用する別の方法では、サイズ、位置、および色を変更できるように、自分自身のインスタンスを1つだけ作成できますが、ペイントするために使用するPaintオブジェクトは非公開です。その上にXferModeを設定しないでください。あなたが1つ以上のドットを持っているならば、それらはお互いに塗りつぶすのではないので、必要です。それはカラーフィルタを持っていますが、カラーフィルタのように見えません。
私は新しいので、2つのリンクを投稿するだけで、2つの写真を投稿するのではなく、私がredditに書いたのと同じ質問にリンクします。 (と私はハハ、ここに来た理由はまだありません答え、)これが行われる必要がありますどのように
、私は一つのクラスや他の必要な知っています。 RadialGradientは、異なるサイズ、位置、または色が必要なときに新しいものを作成する必要がなければ、完璧です。 GradientDrawableは1つのインスタンスしか持つことができないので同様に優れていますが、使用するペイントにXferModeを設定できる必要があります。別の授業はありますか、あるいは私はこれらの2つの間に何かを見逃していますか?
ありがとうございます!