Native Module Android - представления не отображаются при добавлении через обработчик событий glsurfaceview.rendererAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Native Module Android - представления не отображаются при добавлении через обработчик событий glsurfaceview.renderer

Сообщение 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. Если я перемесчу код для добавления зеленого представления за пределами маркерозаписного обработчика, он становится видимым.


Подробнее здесь: https://stackoverflow.com/questions/795 ... eview-rend
Ответить

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

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

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

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

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