SurfaceView на Android 2.3.6 не отображает весь регион
В моем приложении я создаю SurfaceView
и использовать его из NDK с помощью API-интерфейса ANativeWindow: ANativeWindow_lock
а потом ANativeWindow_unlockAndPost
,
Размер поверхности задается ANativeWindow_setBuffersGeometry
до 320х480. Размер экрана больше - 480х800.
SurfaceView растягивается с помощью LayoutParams почти до полного экрана.
Проблема, которую я вижу, состоит в том, что мои кадры обновляются только в области 320x480.
Другая часть поверхности обновляется только в том случае, если поверх анимируется другой вид или если я явно вызываю postInvalidate
на поверхности вид. Тем не мение, postInvalidate
работает с задержкой.
Это происходит только на Nexus S с 2.3.6 с ПЗУ от https://developers.google.com/android/nexus/images (2.3.6 (GRK39F)). На том же устройстве с 4.0.4 такой ошибки нет.
Отлично работает на Samsung Ace-2 с 2.3.6. Также отлично работает на более высоких версиях Android.
Кто-нибудь видел такой баг? Уверен, что это ошибка на данном телефоне. Любые предложения, как обойти это?
1 ответ
После небольшой отладки и чтения исходного кода SurfaceView я нашел решение. По-видимому, ANativeWindow_setBuffersGeometry
недостаточно, и размер должен быть также установлен из Java. Это помогло мне:
public void surfaceCreated(SurfaceHolder holder) {
holder.setFixedSize(BuildConfig.VIDEO_WIDTH, BuildConfig.VIDEO_HEIGHT);
}