質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.53%
Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

1回答

2077閲覧

activity_main.xmlで表示したい

退会済みユーザー

退会済みユーザー

総合スコア0

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2017/01/12 04:38

編集2022/01/12 10:55

回転をした立体を表示するアプリを作っているのですが、
MainActivity.javaに

GLView view = new GLView(this); setContentView(view);

と渡しているのでGLViewが表示されactivity_main.xmlが表示されません。

activity_main.xmlのGLViewというところにGLVewクラスを渡して表示したいです。
どうしたらよいですか。
MainActivity.java

import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); GLView view = new GLView(this); setContentView(view); }

GLView.java

import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; import android.content.Context; import android.opengl.GLSurfaceView; import android.util.Log; class GLView extends GLSurfaceView implements GLSurfaceView.Renderer { private static final String TAG = "GLVIEW"; private Cube mCube; public GLView(Context context) { super(context); setRenderer(this); } public void onDrawFrame(GL10 gl) { Log.i(TAG, "onDrawFrame()"); gl.glClearColor(0, 0, 1, 1.0f); gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); gl.glEnable(GL10.GL_DEPTH_TEST); gl.glMatrixMode(GL10.GL_MODELVIEW); gl.glLoadIdentity(); mCube.draw(gl); } public void onSurfaceChanged(GL10 gl, int width, int height) { Log.i(TAG, "onSurfaceChanged()"); gl.glEnable(GL10.GL_CULL_FACE); gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY); gl.glViewport(0, 0, width, height); gl.glMatrixMode(GL10.GL_PROJECTION); gl.glLoadIdentity(); float ratio = (float) width / height; float size = 0.01f * (float) Math.tan((70.0f / 180.0f / 3.141592f) / 2.0); gl.glFrustumf(-size, size, -size / ratio, size / ratio, 0.01f, 100.0f); // gl.glOrthof(-1, 1, -1.0f/ratio, 1.0f/ratio, 0.01f, 100.0f); } public void onSurfaceCreated(GL10 gl, EGLConfig config) { Log.i(TAG, "onSurfaceCreated()"); mCube = new Cube(gl, getResources()); } protected void onDetachedFromWindow() { super.onDetachedFromWindow(); Log.i(TAG, "onDetachedFromWindow()"); } }

Cube.java

import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; import java.nio.ShortBuffer; import javax.microedition.khronos.opengles.GL10; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.BitmapFactory; import android.opengl.GLUtils; class Cube { private FloatBuffer mVertexBuffer; private FloatBuffer mNormalBuffer; private ShortBuffer mIndexBuffer; private FloatBuffer mTextureBuffer; private int numberOfindex = 36; private int textureId; private float angle = 0f; public Cube(GL10 gl, Resources r) { float x = 2f; float y = 2f; float z = 0.1f; float[] vertices = { x, y, z, -x, y, z, -x,-y, z, x,-y, z, // v0-v1-v2-v3 front x, y, z, x,-y, z, x,-y,-z, x, y,-z, // v0-v3-v4-v5 right x, y, z, x, y,-z, -x, y,-z, -x, y, z, // v0-v5-v6-v1 top -x, y, z, -x, y,-z, -x,-y,-z, -x,-y, z, // v1-v6-v7-v2 left -x,-y,-z, x,-y,-z, x,-y, z, -x,-y, z, // v7-v4-v3-v2 bottom x,-y,-z, -x,-y,-z, -x, y,-z, x, y,-z // v4-v7-v6-v5 back }; //テクスチャUV座標 float[] textures = { 1, 0, 0, 0, 0, 1, 1, 1, // v0-v1-v2-v3 front 0, 0, 0, 1, 1, 1, 1, 0, // v0-v3-v4-v5 right 0, 1, 1, 1, 0, 0, 1, 0, // v0-v5-v6-v1 top 1, 0, 0, 0, 0, 1, 1, 1, // v1-v6-v7-v2 left 0, 1, 1, 1, 1, 0, 0, 0, // v7-v4-v3-v2 bottom 0, 1, 1, 1, 1, 0, 0, 0 // v4-v7-v6-v5 back }; float[] normals = { 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, // v0-v1-v2-v3 front 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, // v0-v3-v4-v5 right 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, // v0-v5-v6-v1 top -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, // v1-v6-v7-v2 left 0,-1, 0, 0,-1, 0, 0,-1, 0, 0,-1, 0, // v7-v4-v3-v2 bottom 0, 0,-1, 0, 0,-1, 0, 0,-1, 0, 0,-1 // v4-v7-v6-v5 back }; short indices[] = { 0, 1, 2, 0, 2, 3, // front 4, 5, 6, 4, 6, 7, // right 8, 9,10, 8,10,11, // top 12,13,14, 12,14,15, // left 16,17,18, 16,18,19, // bottom 20,21,22, 20,22,23 // back }; mVertexBuffer = makeFloatBuffer(vertices); mNormalBuffer = makeFloatBuffer(normals); mIndexBuffer = makeShortBuffer(indices); mTextureBuffer = makeFloatBuffer(textures); textureId = loadTexture(gl, r, R.drawable.anayuki); } public static final FloatBuffer makeFloatBuffer(float[] arr) { ByteBuffer bb = ByteBuffer.allocateDirect(arr.length * 4); bb.order(ByteOrder.nativeOrder()); FloatBuffer fb = bb.asFloatBuffer(); fb.put(arr); fb.position(0); return fb; } public static final ShortBuffer makeShortBuffer(short[] arr) { ByteBuffer bb = ByteBuffer.allocateDirect(arr.length * 4); bb.order(ByteOrder.nativeOrder()); ShortBuffer fb = bb.asShortBuffer(); fb.put(arr); fb.position(0); return fb; } public void draw(GL10 gl) { gl.glTranslatef(0, 0, -30.0f); gl.glRotatef(angle++, 0, 1, 0); gl.glEnable(GL10.GL_TEXTURE_2D); gl.glBindTexture(GL10.GL_TEXTURE_2D, textureId); gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVertexBuffer); gl.glNormalPointer(GL10.GL_FLOAT,0,mNormalBuffer); gl.glEnableClientState(GL10.GL_NORMAL_ARRAY); gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, mTextureBuffer); gl.glDrawElements(GL10.GL_TRIANGLES, numberOfindex, GL10.GL_UNSIGNED_SHORT, mIndexBuffer); } public static final int loadTexture(GL10 gl, Resources r, int resId) { int[] textures = new int[1]; BitmapFactory.Options options = new BitmapFactory.Options(); options.inScaled = false; options.inPreferredConfig = Config.ARGB_8888; Bitmap bmp = BitmapFactory.decodeResource(r, resId, options); if (bmp == null) { return 0; } gl.glGenTextures(1, textures, 0); gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]); GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bmp, 0); gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR); gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR); gl.glBindTexture(GL10.GL_TEXTURE_2D, 0); bmp.recycle(); return textures[0]; } }

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:baselineAligned="false"> <GLView android:id="@+id/GLView" android:layout_width="match_parent" android:layout_height="match_parent" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="メモ" android:onClick="buttonClick" /> </RelativeLayout> </FrameLayout>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

「今まで開いていたファイルを渡して表示したいです。 」の意味はわかりませんが、今のactivity_main.xmlをsetContentViewに渡すとエラーで落ちるはずです。
GLViewにContextとAttributeSetの引数をもつコンストラクタをオーバーライドしてください。

投稿2017/01/12 06:29

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/01/13 01:12

よくわからないのですがこれを足すということであってますか @Override context(){} @Override AttributeSet(){}
yona

2017/01/13 01:37

全く違います。 @Override GLView(Context context ,AttributeSet set)
退会済みユーザー

退会済みユーザー

2017/01/13 02:11

はい。直しておきました。 MainActivityクラスにそのまま入れたら赤い波線が出てきたので調べてきます。 またわからなくなったら質問します。
yona

2017/01/13 02:25

GLViewのコンストラクタの話をしているのに、なぜMainActivityにいれるんですか。
退会済みユーザー

退会済みユーザー

2017/01/13 02:35 編集

GLViewクラスの中のどこに入れても@Overrideの所に赤い波線が出るのでという部分が抜けていました。
matobaa

2017/01/16 01:15

オーバーライドじゃなくてオーバーロードかと。 GLView(Context context ,AttributeSet set)
yona

2017/01/16 01:22

もともとViewクラスでコンストラクタが定義されているので、この場合はオーバーライドであっていると思いますよ。 コンストラクタにはオーバーライドっていい方を使わないんでしたっけ。ど忘れしました。
matobaa

2017/01/16 02:18

yonaさんがオーバーライドと言いたくなる気持ちはわかります。super呼んでるし。 でもコンストラクタの前に@Overrideをつけたら、Eclipseだと「The annotation @Override is disallowed for this location」 javacだと「エラー: 注釈型はこの種類の宣言に使用できません」「annotation type not applicable to this kind of declaration」と怒られました。Override.java を見ると Target=METHOD だけで Target=CONSTRUCTOR がないのでエラーになってしまいます。「コンストラクタには@Overrideアノテーションを付けられない」という制約があります。なんでだろうか……。 http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/0e4fc29a5ce4/src/share/classes/java/lang/Override.java#l49
ozwk

2017/01/16 04:04

コンストラクタをオーバーライドって言わない気がしますね 静的メソッドみたいなもんですし。
yona

2017/01/16 04:11

よく見たら私のコメントに@Overrideって書いてますね。気づきませんでした、ごめんなさい。
退会済みユーザー

退会済みユーザー

2017/01/16 14:48

とりあえず表示はできました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.53%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問