Невозможно рисовать на холсте, загруженном растровым изображением

Я пытаюсь создать функцию сохранения и извлечения изображений в Android. Код, который у меня есть для создания файла jpg из холста, приведен ниже.

Bitmap  bitmap = Bitmap.createBitmap( view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
view.draw(canvas); 
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);

Я пытаюсь прочитать файл jpg и создать изображение на холсте, используя

Bitmap bMap = BitmapFactory.decodeStream(buf);
Bitmap workingBitmap = Bitmap.createBitmap(bMap);
Bitmap mutableBitmap = workingBitmap.copy(Bitmap.Config.ARGB_8888, true);
view.mybitmap = mutableBitmap;
view.onDraw(view.Canvas);

Код, который у меня есть в onDraw,

canvas.drawBitmap(view.mybitmap, 0, 0, view.myPaint);

Это правильно рисует растровое изображение на холсте из сохраненного файла jpg, но после этого я не могу ничего рисовать на холсте. Загрузил ли он неизменное растровое изображение на холсте, которое я не могу редактировать?

Любая помощь будет оценена! Спасибо!


person Manoj Pandey    schedule 11.08.2014    source источник
comment
расширить SurfaceView (или View) и переопределить onDraw (холст Canvas)   -  person Björn Hallström    schedule 12.08.2014
comment
Что значит «но после этого я не могу ничего рисовать на холсте». Если у вашей логики onDraw есть дополнительная работа, вам нужно вызвать недействительность в вашем представлении, когда вам нужно рисовать.   -  person Volodymyr Lykhonis    schedule 12.08.2014
comment
@Vladimir: Это означает, что когда я загружаю растровое изображение на холст, я не могу редактировать рисунок.   -  person Manoj Pandey    schedule 12.08.2014
comment
@ user2365568: Как я уже упоминал в вопросе, я уже переопределил метод onDraw. Вы хотите, чтобы я добавил что-то еще в нем?   -  person Manoj Pandey    schedule 12.08.2014


Ответы (1)


Вам не нужно вызывать метод ondraw напрямую, как вы это делаете сейчас. Для пользовательского класса представления все, что вам нужно будет вызвать, это view.invalidate(); Это автоматически вызовет метод ondraw и перерисует холст. Вам, вероятно, потребуется обновить логику в методе ondraw, чтобы обрабатывать случаи, когда вы хотите рисовать дополнительные элементы на холсте.

person Whitney    schedule 13.08.2014