Этот класс имеет исправление в методе 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
Содержимое веб-просмотра мерцает ⇐ Android
Форум для тех, кто программирует под Android
1772623318
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
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79896875/webview-content-flickering[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия