3

glsurfaceviewの高さをカスタムの高さで設定したい。幅は高さと同じにしたいです。android:layout_width="fill_parent"を使用します。width = height = width_of_the_screenにするにはどうすればよいですか?

どうもありがとう

4

2 に答える 2

4

以下に示すように、onMeasure をオーバーライドし、setMeasuredDimension の両方のパラメーターを受け取った幅に設定する必要があります。

class TouchSurfaceView extends GLSurfaceView {

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            int width = View.MeasureSpec.getSize(widthMeasureSpec); 
    this.setMeasuredDimension(width, width);
}
...

レイアウトは次のとおりです。

...
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="fill_parent"
    android:layout_height="wrap_content" android:layout_gravity="top"
    >
    <se.company.test.TouchSurfaceView android:id="@+id/glSurface"
        android:layout_width="wrap_content" android:layout_height="wrap_content" />
</LinearLayout>
...
于 2012-02-29T18:19:47.453 に答える
1

を使用してプログラムで高さを設定できますview.getLayoutParams().height = view.getMeasuredWidth();。問題は、ビューが初めて描画された後にこれを行う必要があることです。そうしないと、measuredWidthゼロが返されます。(openGL を使用していると仮定すると)、onDrawRenderer クラスが呼び出されるまでに、確実に画面に描画されます。ただし、GL スレッド ( を呼び出すonDraw) と (メイン) UI スレッドの間でメッセージをやり取りする必要があります。これは、ビューの幅/高さなどを変更できる唯一のスレッドです。

于 2011-11-22T16:49:07.937 に答える