私の顧客はアプリケーションで次のウィジェットを望んでいます:
サーバーText
から来ます。勾配角度は、サーバーからの変数にも依存します。また、顧客はグラデーションが動的に塗りつぶされることを望んでいます (ユーザーはグラデーションが 0 からどのように塗りつぶされるかを確認する必要があります)。
2 つの画像を使用します。1 つは色付きの円、もう 1 つは灰色の円です。特定の角度で円セグメントを作成し、それをマスクとして灰色の円に適用してから、色付きの円を新しい灰色の円 (扇形が切り取られた場所) と結合します。
これが私のコードです。を呼び出して変数を初期化しinitializeVarsForCompoundImDrawing
、次に を数回呼び出しmakeCompoundImage
、最後に を呼び出しnullVarsForCompoundImDrawing
てリソースを解放します。
private static Bitmap notColoredBitmap;
private static Bitmap coloredBitmap;
private static Bitmap notColoredWithMaskBitmap;
private static Bitmap finalBitmap;
private static Canvas notColoredWithMaskCanvas;
private static Paint paintForMask;
private static Paint smoothPaint;
private static Canvas finalCanvas;
private static RectF rectForMask;
public static void initializeVarsForCompoundImDrawing()
{
Context context = MainApplication.getContext();
notColoredBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.not_colored);
coloredBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.colored);
paintForMask = new Paint(Paint.ANTI_ALIAS_FLAG);
paintForMask.setStyle(Paint.Style.FILL);
paintForMask.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
rectForMask = new RectF(0, 0, notColoredBitmap.getWidth(), notColoredBitmap.getHeight());
smoothPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
}
public static void nullVarsForCompoundImDrawing()
{
notColoredBitmap = null;
coloredBitmap = null;
paintForMask = null;
rectForMask = null;
smoothPaint = null;
}
public static void makeCompoundImage(ImageView imageView, int angle)
{
notColoredWithMaskBitmap = Bitmap.createBitmap(notColoredBitmap.getWidth(), notColoredBitmap.getHeight(), Bitmap.Config.ARGB_8888);
notColoredWithMaskCanvas = new Canvas(notColoredWithMaskBitmap);
notColoredWithMaskCanvas.drawBitmap(notColoredBitmap, 0, 0, smoothPaint);
notColoredWithMaskCanvas.drawArc(rectForMask, 270, angle, true, paintForMask);
finalBitmap = Bitmap.createBitmap(notColoredBitmap.getWidth(), notColoredBitmap.getHeight(), Bitmap.Config.ARGB_8888);
finalCanvas = new Canvas(finalBitmap);
finalCanvas.drawBitmap(coloredBitmap, 0, 0, smoothPaint);
finalCanvas.drawBitmap(notColoredWithMaskBitmap, 0, 0, smoothPaint);
imageView.setImageBitmap(finalBitmap);
}
最初の質問: このコードを改善して、使用するリソースを減らすことは可能ですか?
2 番目の質問: テキストを に追加するにはどうすればよいですかfinalBitmap
(TextView
これは の上部にImageView
画像と共に表示されます)。