Когда это необходимо или лучше использовать SurfaceView
вместо View
?Разница между SurfaceView и View?
ответ
Представления все нарисованы на одном и том же графическом потоке, который также используется для взаимодействия с пользователем.
Поэтому, если вам нужно быстро обновить графический интерфейс или если рендеринг занимает слишком много времени и влияет на пользовательский интерфейс, используйте SurfaceView
.
Главное отличие состоит в том, что SurfaceView
можно нарисовать на заднем плане, а Views
не может. SurfaceViews
используйте больше ресурсов, хотя вы не хотите их использовать, если вам не нужно.
"Они используют больше ресурсов, хотя, так что вы не хотите использовать их, если вы не должны." - Кто использует больше ресурсов? Просмотры или SurfaceViews? – Dror
Surfaceview использует больше ресурсов, чем виды –
@RiteshGune сколько? –
Несколько вещей, которые я заметил:
- SurfaceViews содержит хороший механизм рендеринга, который позволяет потокам обновлять содержимое поверхности без использования обработчика (хорошо для анимации).
- Surfaceviews не может быть быть прозрачным, они могут появляться только за другими элементами иерархии представлений.
- Я обнаружил, что они намного быстрее для анимации, чем рендеринг на представлении.
Для получения дополнительной информации (и отличный пример использования) обратитесь к проекту LunarLander в разделе примеров SDK .
FYI ... A SurfaceView теперь может быть прозрачным: http://stackoverflow.com/questions/5391089/how-to-make-surfaceview-transparent – Steve
Время прогрессирует! – Ralphleon
@Ralphleon: Что вы имеете в виду под видом поверхности не может быть прозрачным? Могут ли другие виды перекрывать вид поверхности? Например, можно ли временно отображать ListView на поверхности? – Ashwin
обновленный 05/09/2014
ОК. У нас есть official document now.. Он говорил все, о чем я упомянул, в лучшем виде.
Подробнее here.
Да, основное отличие заключается в том, что поверхностьView может быть обновлена на фоне потока. Тем не менее, вас больше беспокоит.
surfaceView выделяет поверхностный буфер, в то время как все представления разделяют один буфер поверхности, который выделяется ViewRoot. Другим словом, surfaceView стоит больше ресурсов.
Внешний вид не может быть аппаратным ускоренным (с JB4.2), в то время как 95% операций при нормальном режиме просмотра ускоряются с использованием openGL ES.
Необходимо выполнить дополнительную работу, чтобы создать свой индивидуальный дизайн поверхности. Вам нужно прослушивать событие surfaceCreated/Destroy, создать поток рендеринга, что более важно, синхронизировать поток рендеринга и основной поток. Однако, чтобы настроить View, все, что вам нужно сделать, это переопределить метод
onDraw
.- Время для обновления отличается. Механизм обновления обычного вида ограничивается или управляется инфраструктурой: вы вызываете
view.invalidate
в потоке пользовательского интерфейса илиview.postInvalid
в другом потоке, чтобы указать инфраструктуре, что представление должно быть обновлено. Однако представление не будет обновляться немедленно, но дождитесь следующего события VSYNC. Легкий подход к пониманию VYSNC заключается в том, чтобы рассматривать его как таймер, который запускает каждые 16 мс для экрана 60 кадров в секунду.В Android все нормальное обновление (и отображение на самом деле, но я не буду говорить сегодня), синхронизируется с VSYNC для достижения большей гладкости. Теперь, обратно в surfaceView, вы можете отображать его в любое время по своему усмотрению. Однако я не могу сказать, является ли это преимуществом, поскольку дисплей также синхронизирован с VSNC, как указано ранее.
Из вашего ответа я чувствую, что лучше использовать класс, полученный из View, чем SurfaceView. Или я что-то ошибаюсь? Это было бы против большинства учебных пособий по разработке 2D игр. – Storm
@Storm что-то, чтобы принять во внимание, заключается в том, что SurfaceView по дизайну не должен блокировать поток пользовательского интерфейса, где вид может быть изменен только с помощью потока пользовательского интерфейса. В большинстве игр SurfaceViews будет делать хороший бит рендеринга, который блокирует поток пользовательского интерфейса простым представлением. Это, по моему мнению, основное преимущество SurfaceView. – zgc7009
A SurfaceView
- это пользовательский вид в Android, который можно использовать для рисования внутри него.
Основное различие между View
и SurfaceView
состоит в том, что вид рисуется в UI Thread
, который используется для всего взаимодействия с пользователем.
Если вы хотите быстро обновить пользовательский интерфейс и отобразить полезный объем информации в , то SurfaceView - лучший выбор.
Но есть несколько технических Внутренности к SurfaceView
:
1. Они не аппаратное ускорение.
2. Нормальные виды визуализируются при вызове методов invalidate
или postInvalidate()
, но это не означает, что представление будет немедленно обновляться (A VSYNC
будет послан, и OS решает, когда он обновляется. SurfaceView
могут быть немедленно обновлены
3. SurfaceView имеет выделенный surface buffer
, поэтому он является более дорогостоящим
Другое определение было бы:.
SurfaceView - это специальный вид, который позволяет отображать содержимое непосредственно на экран.
Источник: Руководство Big Nerd Ranch
Одним из основных различий между SurfaceView и зрением состоит в том, чтобы обновить экран для нормального зрения, мы должны назвать недействительным метод из того же потока, где точка зрения определены. Но даже если мы назовем недействительным, обновление не произойдет сразу. Это происходит только после следующего поступления сигнала VSYNC. Сигнал VSYNC - это генерируемый ядром сигнал, который происходит каждые 16,6 мс, или это также известно как 60 кадров в секунду. Поэтому, если мы хотим больше контролировать обновление экрана (например, для очень быстрой анимации), мы не должны использовать обычный класс представления.
С другой стороны, при обращении к поверхности мы можем обновлять экран так быстро, как мы хотим, и мы можем сделать это из фоновой нити. Поэтому обновление поверхности действительно не зависит от VSYNC, и это очень полезно, если мы хотим сделать высокоскоростную анимацию. У меня мало обучающих видеороликов и примеров приложений, которые хорошо объясняют все эти вещи. Пожалуйста, ознакомьтесь с следующими обучающими видеороликами.
Видео не найдено !! –
исправлено ....... –
- 1. В чем разница между Surfaceview и TextureView?
- 2. Разница между SurfaceView и GLSurfaceView в Android
- 3. В чем разница между {{view}} и {{#view}}
- 4. разница между @Component и @View
- 5. Разница между View и ViewGroup
- 6. View and SurfaceView, какой из них лучше?
- 7. Конфликт Android SurfaceView между CameraPreview и API GoogleMaps v2 View
- 8. В чем разница между Partial View & View?
- 9. В чем разница между View и ViewController?
- 10. WPF Разница между Design View и запуск
- 11. Разница между SQL View и предложением WITH
- 12. Разница между View и Subview - Android
- 13. Есть ли разница между ViewStub и View?
- 14. Разница между отношением 'view' и 'base'
- 15. Android: Разница между onDraw() и surfaceCreated() в SurfaceView?
- 16. В чем разница между View arg0 и View v?
- 17. В чем разница между контроллером View и View?
- 18. Связывание onDraw (View view) с SurfaceView
- 19. Android - Layout SurfaceView и изображение View
- 20. Разница между реализацией SurfaceView на разных версиях Android
- 21. android surfaceview vs view resolution
- 22. SurfaceView vs Custom View (расширенный от просмотра). SurfaceView медленнее, почему?
- 23. Разница между {!! !!} и {{}}
- 24. Zend Framework: разница между View Partials & Helpers
- 25. Android: Решение между SurfaceView и OpenGL (GLSurfaceView)
- 26. Laravel: Разница между видом :: Доля() и View :: композитора()
- 27. В чем разница между View и PartialView в ASP.NET MVC?
- 28. В чем разница между Front Controller и View Helper
- 29. Android: В чем разница между ImageView и View?
- 30. В чем разница между return View() и return base.View()?
Проверьте ответ pierr, который содержит более подробную информацию. –
Ответ официальной детали: http://developer.android.com/guide/topics/graphics/2d-graphics.html –
Это уже не так просто. Проверьте ответ pierr; он имеет ссылку на подробный документ архитектуры (https://source.android.com/devices/graphics/architecture.html) и объясняет, почему аппаратное ускорение рендеринга Canvas может сделать пользовательский вид лучшим выбором. – fadden