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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

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

Q&A

2回答

1504閲覧

うまく表示されない

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android Studio

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

0グッド

0クリップ

投稿2016/10/04 01:13

編集2016/10/05 00:58

前にここで質問したことをやってみたのですがエラーは出ずに表示されないという状態になりました。
自分はどこが間違っているかはわかりません。

前の質問はこれですhttps://teratail.com/questions/49489

現在の状態はこんな感じです。
javaファイル

public class ds extends Activity { private MainSurface surface = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //画面の向きを縦に固定 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); surface = new MainSurface(getApplicationContext()); surface.setRenderer(surface); surface.setFocusable(true); surface.setKeepScreenOn(true); setContentView(R.layout.activity_ds); } @Override protected void onResume() { super.onResume(); surface.onResume(); } @Override protected void onPause() { super.onPause(); surface.onPause(); } public class MainSurface extends GLSurfaceView implements Renderer, SensorEventListener { //センサー public SensorManager sensorManager = null; //センサーのフラグ public boolean sensorMRegisted = false; public boolean sensorARegisted = false; //回転行列 public static final int MATRIX_SIZE = 16; float[] inR = new float[MATRIX_SIZE]; float[] outR = new float[MATRIX_SIZE]; float[] I = new float[MATRIX_SIZE]; //センサーの値保持 public float[] orientationValues = new float[3]; public float[] magneticValues = new float[3]; public float[] accelerometerValues = new float[3]; //傾きの角度 public int[] orientDgrees = new int[3]; //ポリゴン public float box[] = new float[] { //前面 -0.6f, -0.6f, 0.1f, 0.6f, -0.6f, 0.1f, -0.6f, 0.6f, 0.1f, 0.6f, 0.6f, 0.1f, //背面 -0.6f, -0.6f, -0.1f, -0.6f, 0.6f, -0.1f, 0.6f, -0.6f, -0.1f, 0.6f, 0.6f, -0.1f, //左面 -0.6f, -0.6f, 0.1f, -0.6f, 0.6f, 0.1f, -0.6f, -0.6f, -0.1f, -0.6f, 0.6f, -0.1f, //右面 0.6f, -0.6f, -0.1f, 0.6f, 0.6f, -0.1f, 0.6f, -0.6f, 0.1f, 0.6f, 0.6f, 0.1f, //上面 -0.6f, 0.6f, 0.1f, 0.6f, 0.6f, 0.1f, -0.6f, 0.6f, -0.1f, 0.6f, 0.6f, -0.1f, //下面 -0.6f, -0.6f, 0.1f, -0.6f, -0.6f, -0.1f, 0.6f, -0.6f, 0.1f, 0.6f, -0.6f, -0.1f, }; public FloatBuffer cubeBuff; //頂点座標バッファ public MainSurface(Context context) { super(context); Log.d(MainSurface.class.getName(), "constractor"); //バッファの生成 cubeBuff = makeFloatBuffer(box); } @Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { Log.d(MainSurface.class.getName(), "onSurfaceCreated"); } @Override public void onDrawFrame(GL10 gl) { //背面塗り潰し gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); //モデルビュー行列の指定 gl.glMatrixMode(GL10.GL_MODELVIEW); gl.glLoadIdentity(); GLU.gluLookAt(gl, 0, 0, 3, 0, 0, 0, 0, 1, 0); //頂点配列の指定 gl.glVertexPointer(3, GL10.GL_FLOAT, 0, cubeBuff); gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); gl.glPushMatrix(); gl.glRotatef(orientDgrees[1], -1.0f, 0.0f, 0.0f); gl.glRotatef(orientDgrees[2], 0.0f, -1.0f, 0.0f); gl.glRotatef(orientDgrees[0], 0.0f, 0.0f, -1.0f); //前面と背面のプリミティブの描画 gl.glColor4f(1.0f, 0, 0, 1.0f); gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4); gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 4, 4); //左面と右面のプリミティブの描画 gl.glColor4f(0, 1.0f, 0, 1.0f); gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 8, 4); gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 12, 4); //上面と下面のプリミティブの描画 gl.glColor4f(0, 0, 1.0f, 1.0f); gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 16, 4); gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 20, 4); gl.glPopMatrix(); } @Override public void onSurfaceChanged(GL10 gl, int width, int height) { // ここから四角形を表示? gl.glMatrixMode(GL10.GL_PROJECTION); gl.glLoadIdentity(); gl.glViewport(0, 0, width, height); GLU.gluPerspective(gl, 45.0f, ((float) width) / height, 1f, 100f); //背面塗り潰し色の指定 gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); //デプスバッファ gl.glEnable(GL10.GL_DEPTH_TEST); gl.glEnable(GL10.GL_CULL_FACE); gl.glDepthFunc(GL10.GL_LEQUAL); gl.glClearDepthf(1.0f); //シェーディング gl.glShadeModel(GL10.GL_SMOOTH); } @Override public void onResume() { super.onResume(); //センサーのインスタンス初期化 if (sensorManager == null) { sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); } //磁界センサーのリスナー登録 List<Sensor> sensorsMagnetic = sensorManager.getSensorList(Sensor.TYPE_MAGNETIC_FIELD); //加速度センサーのリスナー登録 List<Sensor> sensorsAcceler = sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER); if (sensorsMagnetic.size() > 0 && sensorsAcceler.size() > 0) { sensorMRegisted = sensorManager.registerListener(this, sensorsMagnetic.get(0), SensorManager.SENSOR_DELAY_FASTEST); sensorARegisted = sensorManager.registerListener(this, sensorsAcceler.get(0), SensorManager.SENSOR_DELAY_FASTEST); } else { //センサーが不足していればメッセージを表示 Toast.makeText(getApplicationContext(), "Sensors are running short!", Toast.LENGTH_LONG).show(); } } @Override public void onPause() { super.onPause(); //センサー解除 if (sensorMRegisted || sensorARegisted) { sensorManager.unregisterListener(this); sensorMRegisted = false; sensorARegisted = false; } } /* * onSensorChanged()はセンサの値が変更された際に呼び出されるメソッド */ @Override public void onSensorChanged(SensorEvent event) { switch (event.sensor.getType()) { case Sensor.TYPE_MAGNETIC_FIELD: magneticValues = event.values.clone(); break; case Sensor.TYPE_ACCELEROMETER: accelerometerValues = event.values.clone(); break; } //センサーから得た値を端末の傾き角度に変換する処理 if (magneticValues != null && accelerometerValues != null) { SensorManager.getRotationMatrix(inR, I, accelerometerValues, magneticValues); //Activityの表示が縦固定の場合。横向きになる場合は要修正 SensorManager.remapCoordinateSystem(inR, SensorManager.AXIS_X, SensorManager.AXIS_Z, outR); SensorManager.getOrientation(outR, orientationValues); //ラジアンを角度に変換 orientDgrees[0] = (int) Math.toDegrees(orientationValues[0]); orientDgrees[1] = (int) Math.toDegrees(orientationValues[1]); orientDgrees[2] = (int) Math.toDegrees(orientationValues[2]); } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } } private static FloatBuffer makeFloatBuffer(float[] values) { ByteBuffer bb = ByteBuffer.allocateDirect(values.length * 4); bb.order(ByteOrder.nativeOrder()); FloatBuffer fb = bb.asFloatBuffer(); fb.put(values); fb.position(0); return fb; } }

xmlファイル

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.pc632g.a3d.ds" android:orientation="vertical" android:weightSum="2"> <com.example.pc632g.a3d.ds.MainSurface android:layout_width="fill_parent" android:layout_weight="1" android:layout_height="0dp" android:id="@+id/surfaceView2" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:layout_alignParentTop="true" android:layout_above="@+id/button3" /> </LinearLayout>

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

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

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

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

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

guest

回答2

0

LinearLayoutなのにlayout_above使えないと思いますが…
と言うか入れるViewが1つだけならLinearLayout使う必要なさそうですし、onCreateの最後の行を

java

1// 2setContentView(surface);

にしてみては?

投稿2016/10/05 01:33

swordone

総合スコア20651

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

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

退会済みユーザー

退会済みユーザー

2016/10/05 01:48

ありがとうございます。 こういう解説を待ってました。
退会済みユーザー

退会済みユーザー

2016/10/05 01:59

やってみましたが実機で試したら、 問題が発生したため終了しますと出ました。
swordone

2016/10/05 02:01

ログを掲載して下さい。もともとの質問から離れると思われるので、別質問として。
yona

2016/10/05 02:05

これではレイアウトファイルを使ってないので解決になっていないですよ。 具体的な回答を提示されて、自分の状況に当てはまらないのに飛び付く典型ですね。 以前の質問の状態に戻っているのに気づきませんか? swordoneさん この質問者はレイアウトファイルに紐付いたViewのインスタンスを取得したいのに、自分ではそれを理解していないようです。
退会済みユーザー

退会済みユーザー

2016/10/05 02:20

yonaさんの回答はできる人にはわかるかもしれませんが、 自分には、その回答内容もわからないので具体的な回答も載せてほしいんです。
guest

0

MainSurfaceはfindViewByIdにsurfaceView2を渡して取得できるインスタンスを使用する必要があります。

投稿2016/10/04 01:32

yona

総合スコア18155

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

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

退会済みユーザー

退会済みユーザー

2016/10/05 00:44

すこし分かりにくいのですが、 javaファイルにfindViewByIdを追加するということでしょうか?
yona

2016/10/05 01:11

そうです
退会済みユーザー

退会済みユーザー

2016/10/05 01:20

一応調べてみたのですが、どう追加すればいいかわかりませんでした。
yona

2016/10/05 01:25

わかりませんじゃわかりません。 実装した内容を書いてください。
退会済みユーザー

退会済みユーザー

2016/10/05 01:33

一応初心者なので回答内容がわからないです。 実装も何もどこの行にfindViewByIdをどう入れるかもわからないんです
yona

2016/10/05 01:36

レイアウトxmlからButtonをインスタンス化したことはありませんか? ブログでfindViewByIdを使っているものはありませんでしたか? それを真似すればいいですよ。 手取り足取り教えてもらいたならお金を払ってセミナーとかに行った方がいいです。
yona

2016/10/05 02:26

下記の記述を見たことありませんか? surface =(MainSurface)findViewById(R.id.surfaceView2); 初心者だからと言って調べることや考えることを放棄しないでください。 初心者だからこそ、調べて自分なりに実装してみる必要があるんですよ。 この問題は参考書なら最初の方に載っているし、サイトにもたくさん情報があります。
退会済みユーザー

退会済みユーザー

2016/10/05 02:32

その記述、見たことはありませんでした
yona

2016/10/05 02:34

では基礎がごっそり抜けているんですね。 今後このような質問で数日かけるならその数日を基礎にあてた方が効率的ですよ。
退会済みユーザー

退会済みユーザー

2016/10/05 02:54

そうですね。わかりやすいサイトとかあればよかったです。 学校でやった時も基礎中の基礎だけだったので、 やった気になっていました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問