Мой клиент хочет использовать следующий виджет в приложении: Text
поступает с сервера. Угол градиента зависит от переменных, которые также поступают с сервера. Кроме того, клиент хочет, чтобы градиент заполнялся динамически (пользователь должен видеть, как градиент заполняется, начиная с 0).
Теперь я делаю следующее: я использую два изображения: один - цветной круг, второй - серый круг. Я создаю сегмент круга с определенным углом и применяю его как маску к серому кругу, а затем объединяю цветной круг с новым серым кругом (где сектор отключен).
Вот мой код. Я инициализирую переменные, вызывающие 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);
}
Первый вопрос: можно ли улучшить этот код, чтобы использовать меньше ресурсов?
Второй вопрос: как добавить текст в finalBitmap
(теперь это TextView
, который отображается в верхней части ImageView
с изображением)?