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

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

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

Восстановление SurfaceView - Программирование Android

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

Обработка касаний в SurfaceView - Программирование Android
Всем привет! Для обработки касаний в surfaceview определяю OnTouchEvent () но касания не обрабатываются. Контролирую через Log.d(). В чем...

Вращение фигуры в SurfaceView - Программирование Android
Сейчас фигура вращается с помощью функции glRotate, все работает, и она вращается при запуске. Как сделать, чтобы фигура вращалась не...

Узнать фон SurfaceView - Программирование Android
Как узнать фон SurfaceView? mSurfaceViewLeft = (SurfaceView)findViewById(R.id.surfaceViewLeft); mSurfaceViewRight =...

Простейший пример SurfaceView - Программирование Android
Здравствуйте. Напишите пожалуйста простейшую программу рисующую точку на экране с помощью SurfaceView.

Вспомогательный поток в SurfaceView - Программирование Android
Правильно ли использовать дополнительный поток в SurfaceView? Т.е. допустим для обработки долгого касания экрана, удержания. В 42-й и...

SurfaceView - широкий рисунок - Программирование Android
Проблема в ограничениях размеров. Создаю класс: public class D3D extends SurfaceView { public D3D(Context...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Pablito
2455 / 1900 / 591
Регистрация: 12.05.2014
Сообщений: 6,702
Завершенные тесты: 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
263 / 238 / 43
Регистрация: 08.05.2012
Сообщений: 1,283
17.11.2016, 17:53     Восстановление SurfaceView #4
Ну а если в onPause удалить очистить SurfaceView, а в onResume нарисовать по новой?
Pablito
2455 / 1900 / 591
Регистрация: 12.05.2014
Сообщений: 6,702
Завершенные тесты: 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 никакого отношения не имеет.
Pablito
2455 / 1900 / 591
Регистрация: 12.05.2014
Сообщений: 6,702
Завершенные тесты: 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
@Override protected void onDraw(Canvas canvas){ //рисует игровое поле super.onDraw(canvas); Paint paint = new Paint();...

SurfaceView&Canvas - Программирование Android
Подскажите, как реализовать отображение, например, карандашика, когда рисуешь на Canvas в SurfaceView. В какую сторону копать, чтобы такое...

Передать значение из surfaceview в activity - Программирование Android
Всем доброго времени суток. Есть surfaceview и в методе ondraw я меняю одну переменную i, после выполнения определенного условия я ухожу в...

Событие нажатия на Bitmap в SurfaceView - Программирование 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