У меня есть нативное приложение React с нативным модулем Android. Модуль использует glsurfaceview.renderer, который выполняет некоторую работу и на каждом ondrawframe вызывает функцию из нативного модуля. Функция (давайте назовем его обработчиком событий) должна нарисовать несколько просмотров, и я вижу, что они добавляются к их родительскому мнению, но не видны. Однако, если я добавлю представление с тем же кодом за пределами обработчика событий, это видно. Вот упрощенный код, который рисует один синий вид за пределами обработчика событий (который виден на пользовательском интерфейсе) и один зеленый вид внутри обработчика событий (который не отображается на пользовательском интерфейсе): < /p>
override fun createViewInstance(reactContext: ThemedReactContext): FrameLayout {
val layout = FrameLayout(reactContext)
layout.id = View.generateViewId()
layout.layoutParams = FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.MATCH_PARENT
)
// Create a GL surface view to render camera frames:
val session = Session(savedReactContext)
session.resume()
val glLayout = FrameLayout(reactContext);
glLayout.layoutParams = FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.MATCH_PARENT
)
val glSurfaceView = GLSurfaceView(savedReactContext)
glSurfaceView.layoutParams = ViewGroup.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT
)
// Setup orientation helper:
initializeOrientationHelper(reactContext)
renderer = MyGLRenderer(savedReactContext, session)
glSurfaceView.setEGLContextClientVersion(2) // Use OpenGL ES 2.0
glSurfaceView.setRenderer(renderer)
glLayout.addView(glSurfaceView)
layout.addView(glLayout)
glSurfaceView.setZOrderOnTop(false)
glSurfaceView.setZOrderMediaOverlay(false)
// Find or create overlay for markers
val activity = savedReactContext.currentActivity
var markerOverlay = layout.findViewWithTag("markerOverlay")
if (markerOverlay == null) {
activity!!.runOnUiThread {
markerOverlay = FrameLayout(activity)
markerOverlay.tag = "markerOverlay"
markerOverlay.setBackgroundColor(Color.argb(100, 255, 0, 0)) // Red with 100 alpha
layout.addView(
markerOverlay,
ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
)
)
}
}
val centerX = 500
val centerY = 500
// Create a simple BLUE marker
val blueMarkerView = View(activity).apply {
layoutParams = FrameLayout.LayoutParams(100, 100).apply {
leftMargin = centerX - 50
topMargin = centerY - 50
}
setBackgroundColor(Color.BLUE)
}
markerOverlay.addView(blueMarkerView)
markerOverlay.requestLayout()
markerOverlay.invalidate()
var markerCreatedInOnPositionsUpdated = false
// Finish setting up glSurfaceView:
renderer.markerPositionsUpdated = fun(positions: List): String {
if (!markerCreatedInOnPositionsUpdated) {
activity!!.runOnUiThread {
val centeraX = 600
val centeraY = 600
// Create a simple GREEN marker:
val greenMarkerView = View(activity).apply {
layoutParams = FrameLayout.LayoutParams(100, 100).apply {
leftMargin = centeraX - 50
topMargin = centeraY - 50
}
setBackgroundColor(Color.GREEN)
}
markerOverlay.addView(greenMarkerView)
markerOverlay.requestLayout()
markerOverlay.invalidate()
markerCreatedInOnPositionsUpdated = true
Log.d("OverlayCheck", "MarkerOverlay child count: ${markerOverlay.childCount}")
glSurfaceView.requestRender()
}
}
return ""
}
setupLifecycleListener()
return layout
}
< /code>
После первого маркера, выполненного MarkerpositionSupdated, эта строка кода: < /p>
log.d("overlaycheck »,« Markeroverlay Child Count: $ {markeroverlay.childcount} ») < /p>
, что 2 -й просмотр добавляется в Marker, но в Martalet -On - Mast On Bree On. Если я перемесчу код для добавления зеленого представления за пределами маркерозаписного обработчика, он становится видимым.
Подробнее здесь: https://stackoverflow.com/questions/795 ... eview-rend
Native Module Android - представления не отображаются при добавлении через обработчик событий glsurfaceview.renderer ⇐ Android
Форум для тех, кто программирует под Android
1741961696
Anonymous
У меня есть нативное приложение React с нативным модулем Android. Модуль использует glsurfaceview.renderer, который выполняет некоторую работу и на каждом ondrawframe вызывает функцию из нативного модуля. Функция (давайте назовем его обработчиком событий) должна нарисовать несколько просмотров, и я вижу, что они добавляются к их родительскому мнению, но не видны. Однако, если я добавлю представление с тем же кодом за пределами обработчика событий, это видно. Вот упрощенный код, который рисует один синий вид за пределами обработчика событий (который виден на пользовательском интерфейсе) и один зеленый вид внутри обработчика событий (который не отображается на пользовательском интерфейсе): < /p>
override fun createViewInstance(reactContext: ThemedReactContext): FrameLayout {
val layout = FrameLayout(reactContext)
layout.id = View.generateViewId()
layout.layoutParams = FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.MATCH_PARENT
)
// Create a GL surface view to render camera frames:
val session = Session(savedReactContext)
session.resume()
val glLayout = FrameLayout(reactContext);
glLayout.layoutParams = FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.MATCH_PARENT
)
val glSurfaceView = GLSurfaceView(savedReactContext)
glSurfaceView.layoutParams = ViewGroup.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT
)
// Setup orientation helper:
initializeOrientationHelper(reactContext)
renderer = MyGLRenderer(savedReactContext, session)
glSurfaceView.setEGLContextClientVersion(2) // Use OpenGL ES 2.0
glSurfaceView.setRenderer(renderer)
glLayout.addView(glSurfaceView)
layout.addView(glLayout)
glSurfaceView.setZOrderOnTop(false)
glSurfaceView.setZOrderMediaOverlay(false)
// Find or create overlay for markers
val activity = savedReactContext.currentActivity
var markerOverlay = layout.findViewWithTag("markerOverlay")
if (markerOverlay == null) {
activity!!.runOnUiThread {
markerOverlay = FrameLayout(activity)
markerOverlay.tag = "markerOverlay"
markerOverlay.setBackgroundColor(Color.argb(100, 255, 0, 0)) // Red with 100 alpha
layout.addView(
markerOverlay,
ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
)
)
}
}
val centerX = 500
val centerY = 500
// Create a simple BLUE marker
val blueMarkerView = View(activity).apply {
layoutParams = FrameLayout.LayoutParams(100, 100).apply {
leftMargin = centerX - 50
topMargin = centerY - 50
}
setBackgroundColor(Color.BLUE)
}
markerOverlay.addView(blueMarkerView)
markerOverlay.requestLayout()
markerOverlay.invalidate()
var markerCreatedInOnPositionsUpdated = false
// Finish setting up glSurfaceView:
renderer.markerPositionsUpdated = fun(positions: List): String {
if (!markerCreatedInOnPositionsUpdated) {
activity!!.runOnUiThread {
val centeraX = 600
val centeraY = 600
// Create a simple GREEN marker:
val greenMarkerView = View(activity).apply {
layoutParams = FrameLayout.LayoutParams(100, 100).apply {
leftMargin = centeraX - 50
topMargin = centeraY - 50
}
setBackgroundColor(Color.GREEN)
}
markerOverlay.addView(greenMarkerView)
markerOverlay.requestLayout()
markerOverlay.invalidate()
markerCreatedInOnPositionsUpdated = true
Log.d("OverlayCheck", "MarkerOverlay child count: ${markerOverlay.childCount}")
glSurfaceView.requestRender()
}
}
return ""
}
setupLifecycleListener()
return layout
}
< /code>
После первого маркера, выполненного MarkerpositionSupdated, эта строка кода: < /p>
log.d("overlaycheck »,« Markeroverlay Child Count: $ {markeroverlay.childcount} ») < /p>
, что 2 -й просмотр добавляется в Marker, но в Martalet -On - Mast On Bree On. Если я перемесчу код для добавления зеленого представления за пределами маркерозаписного обработчика, он становится видимым.
Подробнее здесь: [url]https://stackoverflow.com/questions/79509329/android-native-module-views-not-rendered-when-added-through-glsurfaceview-rend[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия