glsurfaceviewの高さをカスタムの高さで設定したい。幅は高さと同じにしたいです。android:layout_width="fill_parent"を使用します。width = height = width_of_the_screenにするにはどうすればよいですか?
どうもありがとう
glsurfaceviewの高さをカスタムの高さで設定したい。幅は高さと同じにしたいです。android:layout_width="fill_parent"を使用します。width = height = width_of_the_screenにするにはどうすればよいですか?
どうもありがとう
以下に示すように、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>
...
を使用してプログラムで高さを設定できますview.getLayoutParams().height = view.getMeasuredWidth();
。問題は、ビューが初めて描画された後にこれを行う必要があることです。そうしないと、measuredWidth
ゼロが返されます。(openGL を使用していると仮定すると)、onDraw
Renderer クラスが呼び出されるまでに、確実に画面に描画されます。ただし、GL スレッド ( を呼び出すonDraw
) と (メイン) UI スレッドの間でメッセージをやり取りする必要があります。これは、ビューの幅/高さなどを変更できる唯一のスレッドです。