Содержимое веб-просмотра мерцаетAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Содержимое веб-просмотра мерцает

Сообщение Anonymous »

Этот класс имеет исправление в методе setWebViewLayerTypeHardware. Если удалить установку исправления в onResume, где установлен слой ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, а затем через 1000 мс устанавливается ОБОРУДОВАНИЕ, то при возвращении на экран этого класса отображается содержимое веб-просмотра. Он начинает мерцать. Как это исправить без задержки в 1000 мс? Если сразу изменить, исправление не исчезнет. Я пробовал те же решения с doOnLayout, preDraw, Choreographer — тоже не помогло. И мне приходится использовать именно АППАРАТНЫЙ слой
private val isWebViewClearFixEnabled

get() = features?.getWebViewClearFix()?.isFeatureAvailable() == true

private val isFixEnabled

get() = features.hasFeatureEnabled()

class CatalogFragment : BaseFragment() {

private var catalogDelegate: CatalogDelegate? = null

private var needsGpuReset = false

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

catalogDelegate = ctalogDelegate(

shouldCloseOnFinish = arguments?.getBoolean(KEY_CLOSE_ON_FINISH) ?: false,

closeCatalog = { close() }

)

catalogDelegate?.restoreState(savedInstanceState)

catalogDelegate?.onCreate(requireActivity())

initMiniAppHandlers()

}

override fun onResume() {

super.onResume()

setWebViewLayerTypeHardware()

}

override fun onPause() {

super.onPause()

setWebViewLayerTypeSoftware()

}

override fun onSaveInstanceState(outState: Bundle) {

super.onSaveInstanceState(outState)

giftsCatalogDelegate?.saveState(outState)

}

override fun onDestroy() {

catalogDelegate?.onDestroy(requireContext())

super.onDestroy()

}

private fun setWebViewLayerTypeSoftware() {

if (isFixEnabled) {

val webView = browser?.state?.view

webView?.setLayerType(View.LAYER_TYPE_SOFTWARE, null)

needsGpuReset = true

}

}

private fun setWebViewLayerTypeHardware() {

if (isFixEnabled && needsGpuReset) {

needsGpuReset = false

val webView = browser?.state?.view ?: return

webView?.postDelayed({

webView?.setLayerType(View.LAYER_TYPE_HARDWARE, null)

}, 1000) // for weak devices, there is enough delay of 200 ms, for fast devices, it turned out empirically that it takes about 1000 ms.

}

}

// other code

}


Подробнее здесь: https://stackoverflow.com/questions/798 ... flickering
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»