Конечно, есть несколько способов сделать это, но я бы сказал, что лучший способ сделать это - создать пользовательский View
(класс, производный от View
) и иметь этот дескриптор. ваш растровый рисунок и все ваши сенсорные события.
Нужно написать много кода для загрузки Bitmap
s и отслеживания всех их позиций (а затем вывести их на холст в onDraw
), но если вы начнете с малого, просто разрешив одно изображение чтобы рисовать и перетаскивать по экрану, вы можете опираться на это и сохранять свой код организованным.
Вам нужно переопределить onDraw(Canvas)
и onTouchEvent(MotionEvent)
в своем пользовательском View
. Вы загрузите свои растровые изображения с помощью BitmapFactory
(decodeResource
метод, если вы включаете изображения в качестве ресурсов в свой проект), и вам нужно будет не забывать вызывать recycle
на своих растровых изображениях, когда вы больше не используете их.
В onDraw
вы рисуете свои растровые изображения на холсте в определенном месте, используя Canvas.drawBitmap
. Вы можете выбрать одну из двух перегрузок этого метода: одну, которая принимает верхнюю и левую координаты растрового изображения как float
s (и, следовательно, не выполняет масштабирование или растяжение), а другую, которая принимает прямоугольник назначения и источник для выполнения масштабирования, растяжение и размещение.
Я всегда использую последнее, поскольку оно дает мне более точно настроенный контроль. Если вы выберете этот маршрут, вам нужно будет сохранить два экземпляра Rect
и экземпляр Bitmap
для каждого нарисованного изображения, обновить их в событиях касания и нарисовать их на холсте в событии рисования.
Когда что-то меняется внутри вашего представления (как в случае события касания), вызовите метод invalidate()
, и среда будет знать, чтобы перерисовать все, что вызывает ваш onDraw
метод.