Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
ogremlin
2 / 2 / 0
Регистрация: 21.04.2015
Сообщений: 22
#1

Восстановление SurfaceView - Android

17.11.2016, 17:08. Просмотров 185. Ответов 7
Метки нет (Все метки)

Кто работал с SurfaceView, помогите!
Рисую на SurfaceView с помощью onTouchEvent(), без потока, все замечательно рисует, сворачиваю приложение, восстанавливаю SurfaceView чистый, стоит нажать на него сразу появляется все, что было нарисовано раньше… как сделать чтоб он сразу после восстановления отображал нарисованное? canvas.save() и canvas.restore() не помогают
Вот собственно само рисование все просто и примитивно:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Override
public boolean onTouchEvent(MotionEvent event) {
 
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        path.moveTo(event.getX(), event.getY());
    } else if (event.getAction() == MotionEvent.ACTION_MOVE) {
        path.lineTo(event.getX(), event.getY());
    } else if (event.getAction() == MotionEvent.ACTION_UP) {
        path.lineTo(event.getX(), event.getY());
    }
 
    if (path != null) {
        canvas = surfaceHolder.lockCanvas();
        canvas.drawPath(path, getPaint());
        surfaceHolder.unlockCanvasAndPost(canvas);
    }
 
    return true;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Паблито
2195 / 1809 / 562
Регистрация: 12.05.2014
Сообщений: 6,445
Завершенные тесты: 1
17.11.2016, 17:21     Восстановление SurfaceView #2
а если в onResume() активити или фрагмента вызывать что-то типа surfaceView.invalidate();
?
ogremlin
2 / 2 / 0
Регистрация: 21.04.2015
Сообщений: 22
17.11.2016, 17:44  [ТС]     Восстановление SurfaceView #3
Да все такие фишки перепробовал, у SurfaceView нет invalidate, да и surfaceChanged вызывается уже после Resume у Activity, пробовал просто рисовать точку на канве в surfaceChanged, чтоб оно как-то обновилось, не помогает точка рисуется а остальное нет, только после нажатия на SurfaceView, нашел инфу что это связано с некой множественно буферизацией у SurfaceView, типа разные слои у SurfaceView и надо использовать канву с битмэпом типа canvas = new Canvas(mBitmap) а уже в surfaceChanged рисовать canvas.drawBitmap(mBitmap, 0, 0, null); но тоже не помогло
ExFau$t
217 / 200 / 40
Регистрация: 08.05.2012
Сообщений: 1,133
17.11.2016, 17:53     Восстановление SurfaceView #4
Ну а если в onPause удалить очистить SurfaceView, а в onResume нарисовать по новой?
Паблито
2195 / 1809 / 562
Регистрация: 12.05.2014
Сообщений: 6,445
Завершенные тесты: 1
17.11.2016, 17:54     Восстановление SurfaceView #5
Цитата Сообщение от ogremlin Посмотреть сообщение
у SurfaceView нет invalidate
да ну?
ogremlin
2 / 2 / 0
Регистрация: 21.04.2015
Сообщений: 22
17.11.2016, 18:04  [ТС]     Восстановление SurfaceView #6
Так нет вроде, invalidate он же запускает на перерисовку весь экран, надо onDraw переопределять, а это уже к SurfaceView никакого отношения не имеет.
Паблито
2195 / 1809 / 562
Регистрация: 12.05.2014
Сообщений: 6,445
Завершенные тесты: 1
17.11.2016, 18:14     Восстановление SurfaceView #7
проверял?
или так же как с
Цитата Сообщение от ogremlin Посмотреть сообщение
у SurfaceView нет invalidate,
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2016, 12:15     Восстановление SurfaceView
Еще ссылки по теме:

Воспроизведение видео в SurfaceView Android
Android SurfaceView&Canvas
Android Работа с SurfaceView
Узнать фон SurfaceView Android
Canvas, SurfaceView, Touch Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ogremlin
2 / 2 / 0
Регистрация: 21.04.2015
Сообщений: 22
18.11.2016, 12:15  [ТС]     Восстановление SurfaceView #8
Ты прав Паблито-гуру, есть такой метод! Но он не поможет. Решил проблему с помощью Bitmap, рисуем на canvas с Bitmap, а Bitmap уже постим в surface, и у нас всегда актуальный Bitmap есть который и восстанавливаем в surfaceChanged
Java
1
2
3
4
canvas.drawPath(path, getPaint());
canvas = surfaceHolder.lockCanvas();
canvas.drawBitmap(mBitmap, 0, 0, null);
surfaceHolder.unlockCanvasAndPost(canvas);
 Комментарий модератора 
Используйте теги для выделения кода
Yandex
Объявления
18.11.2016, 12:15     Восстановление SurfaceView
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru