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

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

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

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

Q&A

解決済

1回答

1933閲覧

画面に映し出されないのはなぜ

退会済みユーザー

退会済みユーザー

総合スコア0

Android Studio

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

0グッド

0クリップ

投稿2017/01/25 01:31

質問の回答を見てやってみたのですが、アプリを開くと終了してしまいました。
エラーも見ましたがよくわかりませんでした。
おかしな点はどこかご指摘お願いします

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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"> <com.example.pc632g.senitest.GLView android:id="@+id/GLView" 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>

MainActivity.java

import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { /** Called when the activity is first created. */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }

GLView

import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; import android.content.Context; import android.opengl.GLSurfaceView; import android.util.AttributeSet; import android.util.Log; class GLView extends GLSurfaceView implements GLSurfaceView.Renderer { private static final String TAG = "GLVIEW"; private Cube mCube; /** * コンストラクタ * * @param context Context */ 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(); //マトリクスの移動. //描画メソッドの呼び出し。 //それぞれのクラスに描画メソッドをもっているので、GL10のコンテキストを渡して描画を行います. //mTriangle.draw(gl); mCube.draw(gl); } /** * 画面が変更されたときに呼び出されるメソッド. * 1.画面が生成されたとき(onSurfaceCreatedの後) * 2.画面サイズが変わったとき(縦と横で端末が切り替わったとき) */ public void onSurfaceChanged(GL10 gl, int width, int height) { Log.i(TAG, "onSurfaceChanged()"); // GL_CURLL_FACEをDisableにすることで裏面も表示されます // ここをEnableにすると、x or y軸での回転時に裏面が表示されません. // 主に3Dのように裏面の描画を行わないときにEnableにして使います. //gl.glDisable(GL10.GL_CULL_FACE); 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); } /** * GLSurfaceViewのRendererが生成された際に呼ばれる */ public void onSurfaceCreated(GL10 gl, EGLConfig config) { Log.i(TAG, "onSurfaceCreated()"); mCube = new Cube(gl, getResources()); } /** * GLSurfaceViewのRendererが破棄された際に呼ばれる */ protected void onDetachedFromWindow() { super.onDetachedFromWindow(); Log.i(TAG, "onDetachedFromWindow()"); } }

エラー理由
イメージ説明
イメージ説明
イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

xmlから自作Viewを使用する場合は自作ViewにContextとAttributeSetを引数にもつコンストラクタを宣言しないといけません。

投稿2017/01/25 01:41

yona

総合スコア18155

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

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

退会済みユーザー

退会済みユーザー

2017/01/25 01:54

public GLView(Context context) { super(context); // 描画処理を設定 setRenderer(this); } の下に public GLView(Context context, AttributeSet attrs) { super(context, attrs); } ト入れてみましたが駄目でした
yona

2017/01/25 02:40

ダメだったじゃわかりません、同じエラーが出たんですか? 具体的に書いてください。
退会済みユーザー

退会済みユーザー

2017/01/25 02:45

このようなエラーが出ました Process: com.example.pc632g.senitest, PID: 27968 java.lang.NullPointerException at android.opengl.GLSurfaceView.surfaceCreated(GLSurfaceView.java:523) at android.view.SurfaceView.updateWindow(SurfaceView.java:572) at android.view.SurfaceView.access$000(SurfaceView.java:86) at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:175) at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:851) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1875) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5692) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) at android.view.Choreographer.doCallbacks(Choreographer.java:574) at android.view.Choreographer.doFrame(Choreographer.java:544) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:212) at android.app.ActivityThread.main(ActivityThread.java:5151) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:877) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693) at dalvik.system.NativeStart.main(Native Method)
yona

2017/01/25 03:34

エラーが変わっていますね。 エラーログを見る限りもともとの問題は解決しています。 どこかで初期化されていないインスタンスを使用しているようです。 あとはJavaコードでGLViewを追加したときと今回の違いを見比べるとなにかわかると思いますよ。
退会済みユーザー

退会済みユーザー

2017/01/25 03:54

見比べるとなにかわかると言われても多分わからないと思いますが、 とりあえずインスタンスと初期化について調べてきます
退会済みユーザー

退会済みユーザー

2017/01/25 05:51

private void initComponents() { } public GLView(Context context, AttributeSet attrs) { super(context, attrs); initComponents(); } これを足してみましたがダメでした
yona

2017/01/25 05:59

そう修正したらなにがどうなると思って修正したんですか?
退会済みユーザー

退会済みユーザー

2017/01/25 06:05

インスタンスと初期化を調べていたら出てきたので入れてみました。 何がどうなるかは考えていないです。
yona

2017/01/25 06:09

自分で考えるのを諦めた人に何かを教えるのは苦痛です。 NullPointerExceptionはなんで発生するんですか?
退会済みユーザー

退会済みユーザー

2017/01/25 06:17

NullPointerExceptionが発生するのは初期化されてないからですよね?たしか
yona

2017/01/25 06:19

では、あなたのコードで初期化されていないインスタンスはなんですか?
退会済みユーザー

退会済みユーザー

2017/01/25 06:25

それについて書いてある場所がわからないので分かりません
yona

2017/01/25 06:28

書いてある場所とはなんですか?
退会済みユーザー

退会済みユーザー

2017/01/25 06:31

アプリが開かないのはエラーが出てると思い エラー内容にエラー場所が書かれていると思ったのですが・・・
yona

2017/01/25 06:38

本来は書かれます、しかし自分で作ったものではなくスーパークラス内でエラーが起きると自分で作ったクラスのどこに問題があるかは書かれません。 でもエラーログにGLSurfaceView.surfaceCreated(GLSurfaceView.java:523)でヌルポインタが発生していると書かれています。 この行にはなにが書かれていますか?
退会済みユーザー

退会済みユーザー

2017/01/25 06:43

public void surfaceCreated(SurfaceHolder holder) { mGLThread.surfaceCreated(); } このように書かれていました。
yona

2017/01/25 06:45

そうなるとmGLThreadがnullなんでしょうね。 ではなぜ、mGLThreadがnullなんでしょうか。
退会済みユーザー

退会済みユーザー

2017/01/25 06:55

すみません。わかりません
yona

2017/01/25 07:00

Javaのコードから追加した時は上手くいっているんですよね? 二つのコンストラクタを見比べて違いを見つけてください。
退会済みユーザー

退会済みユーザー

2017/01/25 07:12

うまくいってた時というのは表示されていた時との比較ですか? MainActivity.javaの setContentView(R.layout.activity_main); を GLView view = new GLView(this); setContentView(view); に変えてから一度もアプリが終了せずにうごいてたことがないのですが
yona

2017/01/25 07:17

コンストラクタと書いてあるのが見えませんか?
退会済みユーザー

退会済みユーザー

2017/01/30 00:48 編集

public GLView(Context context) { super(context); // 描画処理を設定 setRenderer(this); } と public GLView(Context context, AttributeSet attrs) { super(context, attrs); } の比較ですね。 setRenderer(this);を入れたら動きました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問