ScrollView中的Android GLSurfaceView生成黑色边框

时间:2015-03-27 09:06:51

标签: android opengl-es scrollview android-framelayout glsurfaceview

我有一个我希望放在ScrollView中的GLSurfaceView。我通过在LinearLayout中添加一个FrameLayout来完成此操作,该插入已添加到ScrollView。

除了我在滚动时在GLSurfaceView上方获得黑色边框外,每次都很好。当屏幕静止时,每次都很好看。任何人都有任何想法。

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scrollbars="none"

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="900dp"
            android:orientation="horizontal"
            android:layout_weight="1"
            android:layout_marginStart="10dp"
            android:layout_marginEnd="10dp"
            android:layout_marginTop="35dp"
            android:visibility="visible"
            android:weightSum="1"
            android:overScrollMode="never">

            <FrameLayout
                android:id="@+id/ecg_graph"
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>

enter image description here

1 个答案:

答案 0 :(得分:6)

一般来说,您不希望在屏幕上移动SurfaceView(或其子类)。请记住,SurfaceView有两个部分,Surface和View。视图部分 - 通常只是布局期间使用的透明“洞” - 由应用程序处理。 Surface部件是由系统合成的独立图形层,其大小和位置由Window Manager管理。

移动SurfaceView时,View部件会立即移动,但Surface会滞后,因为移动它需要与其他进程通信。您可能希望在视图移动的方向上看到一个黑条,因为您已暂时暴露了Surface所覆盖的区域。

处理此问题的首选方法是使用TextureView,其行为与其他视图一样。您需要进行自己的EGL设置和线程管理,因为GLSurfaceView不会为您处理这些。您可以在Grafika中找到一些示例。