Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
ogremlin
2 / 2 / 0
Регистрация: 21.04.2015
Сообщений: 22
1

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

17.11.2016, 17:08. Просмотров 351. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2016, 17:08
Ответы с готовыми решениями:

SurfaceView не отображается
Учусь программировать по книге П. Дейтел, Х. Дейтел "Android для программистов....

Работа с SurfaceView
Отрисовка в SurfaceView никогда не вызывала трудностей, до тех пор, пока не...

Ошибка в SurfaceView
есть игра. отрисовка идет через SurfaceView и поток привязанный к нему....

SurfaceView + onKeyDown
Проблемка очень простая - не реагирует на onKeyDown в классе, наследующем...

Мерцание в SurfaceView
Всем привет! Рисую на SurfaceView фон и на нем анимированные объекты. Кадры...

7
Pablito
2731 / 2166 / 735
Регистрация: 12.05.2014
Сообщений: 7,581
Завершенные тесты: 1
17.11.2016, 17:21 2
а если в onResume() активити или фрагмента вызывать что-то типа surfaceView.invalidate();
?
0
ogremlin
2 / 2 / 0
Регистрация: 21.04.2015
Сообщений: 22
17.11.2016, 17:44  [ТС] 3
Да все такие фишки перепробовал, у SurfaceView нет invalidate, да и surfaceChanged вызывается уже после Resume у Activity, пробовал просто рисовать точку на канве в surfaceChanged, чтоб оно как-то обновилось, не помогает точка рисуется а остальное нет, только после нажатия на SurfaceView, нашел инфу что это связано с некой множественно буферизацией у SurfaceView, типа разные слои у SurfaceView и надо использовать канву с битмэпом типа canvas = new Canvas(mBitmap) а уже в surfaceChanged рисовать canvas.drawBitmap(mBitmap, 0, 0, null); но тоже не помогло
0
ExFau$t
567 / 511 / 115
Регистрация: 08.05.2012
Сообщений: 2,546
17.11.2016, 17:53 4
Ну а если в onPause удалить очистить SurfaceView, а в onResume нарисовать по новой?
1
Pablito
2731 / 2166 / 735
Регистрация: 12.05.2014
Сообщений: 7,581
Завершенные тесты: 1
17.11.2016, 17:54 5
Цитата Сообщение от ogremlin Посмотреть сообщение
у SurfaceView нет invalidate
да ну?
0
ogremlin
2 / 2 / 0
Регистрация: 21.04.2015
Сообщений: 22
17.11.2016, 18:04  [ТС] 6
Так нет вроде, invalidate он же запускает на перерисовку весь экран, надо onDraw переопределять, а это уже к SurfaceView никакого отношения не имеет.
0
Pablito
2731 / 2166 / 735
Регистрация: 12.05.2014
Сообщений: 7,581
Завершенные тесты: 1
17.11.2016, 18:14 7
проверял?
или так же как с
Цитата Сообщение от ogremlin Посмотреть сообщение
у SurfaceView нет invalidate,
1
ogremlin
2 / 2 / 0
Регистрация: 21.04.2015
Сообщений: 22
18.11.2016, 12:15  [ТС] 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);
 Комментарий модератора 
Используйте теги для выделения кода
1
18.11.2016, 12:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2016, 12:15

Вспомогательный поток в SurfaceView
Правильно ли использовать дополнительный поток в SurfaceView? Т.е. допустим...

Обработка касаний в SurfaceView
Всем привет! Для обработки касаний в surfaceview определяю OnTouchEvent () но...

Воспроизведение видео в SurfaceView
Ребят прощу у вас помощи, возникла такая проблема необходимо воспроизвести...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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