2013-12-21 5 views
1

у меня есть класс, который расширяет SurfaceView и реализацию SurfaceHolder.Callback я просто пытаюсь оживить простой точечный рисунок с й и у позиции, которую это положение обновляется со временемПочему все мои переменные сбрасываются при вызове функции «Изменено»?

все отлично работает в моем коде, за исключением того, когда surfacechanged метод вызывается при переходе от протравного к ландшафтному или противоположному, значения x и y возвращаются обратно к исходному значению

Как я могу сохранить позиции x и y одинаково после вызова метода surfacechanged? Мой следующий вопрос: как я могу сохранить ориентацию игры только протрайт и никогда не изменяться в ландшафт, когда называется изменение поверхности? любая помощь была бы замечательной?

ТНХ

+0

Деятельность, содержащая поверхность, воссоздается при изменении ориентации. Это нормальное поведение Android. Изучите жизненный цикл деятельности. Вы можете принудить активность к портрету только в манифесте. Все задокументировано на developer.android.com – Simon

+0

thx Я понимаю, как сделать это protrait в манифесте – user2625304

ответ

0

в AndriodManifest.xml

андроида: configChanges

конфигурации Списки изменений, что активность будет обрабатывать себя. Когда происходит изменение конфигурации во время выполнения, активность отключается и перезапускается по умолчанию, но объявление конфигурации с этим атрибутом предотвратит перезапуск активности. Вместо этого активность остается включенной, а ее метод onConfigurationChanged() - .

Примечание: использование этого атрибута следует избегать и использовать только в качестве последнего курорта. Пожалуйста, прочитайте «Обработка изменений времени выполнения» для получения дополнительной информации о том, как правильно обрабатывать перезапуск из-за изменения конфигурации.

Так писать, как этот

android:configChanges="orientation|screenSize" 

http://developer.android.com/guide/topics/manifest/activity-element.html

НО предлагается пройти через этот

http://developer.android.com/guide/topics/resources/runtime-changes.html

Лучше справиться с этой проблемой в

public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

// Your code 
} 
+0

'Примечание: использование этого атрибута следует избегать и использовать только в качестве последнего средства.« Вы даже цитируете документацию и по-прежнему рекомендуете ее ! Это неприятный взлом, который, вероятно, ответственен за больше сбоев и ошибок в приложениях для Android, чем любая другая причина, поскольку он скрывает ошибки в обработке обратного вызова жизненного цикла для изменений ориентации экрана, но не для других сценариев, которые заставляют деятельность воссоздавать - и о которых большинство разработчиков даже не думает, не говоря уже о тестировании. -1. – Simon

+0

thx man, я читал о деятельности lifecyle, это очень помогает мне – user2625304

Смежные вопросы