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

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

Восстановить пароль Регистрация
 
ogremlin
2 / 2 / 0
Регистрация: 21.04.2015
Сообщений: 22
17.11.2016, 17:08     Восстановление SurfaceView #1
Кто работал с 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2016, 17:08     Восстановление SurfaceView
Посмотрите здесь:

SurfaceView + onKeyDown Android
Android Ошибка в SurfaceView
SurfaceView сворачивание программы Android
Android SurfaceView поверх ImageView
Android Мерцание в SurfaceView
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Паблито
не спать!
1803 / 1537 / 478
Регистрация: 12.05.2014
Сообщений: 5,594
Завершенные тесты: 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
55 / 55 / 4
Регистрация: 08.05.2012
Сообщений: 448
17.11.2016, 17:53     Восстановление SurfaceView #4
Ну а если в onPause удалить очистить SurfaceView, а в onResume нарисовать по новой?
Паблито
не спать!
1803 / 1537 / 478
Регистрация: 12.05.2014
Сообщений: 5,594
Завершенные тесты: 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 никакого отношения не имеет.
Паблито
не спать!
1803 / 1537 / 478
Регистрация: 12.05.2014
Сообщений: 5,594
Завершенные тесты: 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
Еще ссылки по теме:

Android Camera без SurfaceView
Android Вспомогательный поток в SurfaceView
Android Работа с SurfaceView

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

Или воспользуйтесь поиском по форуму:
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
Ответ Создать тему
Опции темы

Текущее время: 21:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru