Рисование на ImageView

Код показывает, как можно что-либо нарисовать на Android.

В качестве элемента для рисования беру ImageView, который занимает весь экран.
В activity_main.xml это:

<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
/>

 

В основном коде задача следующая:

1. Очистить экран.
2. Вывести сообщение по центру экрана.
3. Сообщение должно быть длиной с половину экрана - размер фонта подстраивается под это.

Вот сам код:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Получу геометрию экрана
        WindowManager wm = (WindowManager) getBaseContext().getSystemService(Context.WINDOW_SERVICE);
        Display display = wm.getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);
        final int screenWidth  = size.x;
        final int screenHeight = size.y;

        ImageView imageView = (ImageView) this.findViewById(R.id.imageView);

        // Создаю bitmap, на котором рисую
        Bitmap bitmap = Bitmap.createBitmap(screenWidth,screenHeight,Bitmap.Config.ARGB_4444);
        Canvas canvas = new Canvas(bitmap);

        Paint paint = new Paint();
        paint.setAntiAlias(true);
        // Подменяю ImageView своим изображением
        imageView.setImageBitmap(bitmap);

        // Очищаю изображение
        paint.setColor(Color.WHITE);
        canvas.drawRect(0f, 0f, (float) screenWidth, (float) screenHeight, paint);

        paint.setColor(Color.BLUE);
        String message = "Hello, world";

        // Устанавливаю размер сообщения на половину ширины экрана.
        // и получаю размеры прямоугольника, который ограничивает это сообщение.
        Rect bounds = setTextSizeForWidth(paint,screenWidth/2,message);

        // w - получившийся размер текста по горизонтали
        float w = paint.measureText(message);

        canvas.drawText(message, (screenWidth - w) / 2, (screenHeight + bounds.height()) / 2, paint);

    }

    /**
     * Этот метод подгонки размера шрифтов нашёл в Интернете
     * Добавил сюда возврат Rect, чтобы дополнительно знать высоту текста
     * @param paint
     * @param desiredWidth
     * @param text
     * @return Rect of message with desired width
     */
    private static Rect setTextSizeForWidth(Paint paint, float desiredWidth,
                                            String text) {

        // Pick a reasonably large value for the test. Larger values produce
        // more accurate results, but may cause problems with hardware
        // acceleration. But there are workarounds for that, too; refer to
        // http://stackoverflow.com/questions/6253528/font-size-too-large-to-fit-in-cache
        final float testTextSize = 48f;

        // Get the bounds of the text, using our testTextSize.
        paint.setTextSize(testTextSize);
        Rect bounds = new Rect();
        paint.getTextBounds(text, 0, text.length(), bounds);

        // Calculate the desired size as a proportion of our testTextSize.
        float desiredTextSize = testTextSize * desiredWidth / bounds.width();

        // Set the paint for that size.
        paint.setTextSize(desiredTextSize);

        // Detect bounds of resulting string
        paint.getTextBounds(text, 0, text.length(), bounds);
        return bounds;
    }
}