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

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

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

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

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

Android Studio

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

Q&A

1回答

2889閲覧

surfaceview内に表示されない

退会済みユーザー

退会済みユーザー

総合スコア0

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

Java

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

Android Studio

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

0グッド

0クリップ

投稿2016/09/28 00:28

編集2016/09/29 00:29

お世話になります

今、この画像のような状態で、下にボタンを付けていくつもりなのですが、
イメージ説明

しかしどこを変えたらいいかわからずこのようになってしまっています。どこを変えたらいいかわかりますか?
イメージ説明

少し雑ですがこういう風に灰色のsurfaceview内に表示したいと思っています
イメージ説明

xmlファイル

<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"> <SurfaceView 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>

javaファイル

import

1import java.nio.ByteOrder; 2import java.nio.FloatBuffer; 3import java.util.List; 4 5import javax.microedition.khronos.egl.EGLConfig; 6import javax.microedition.khronos.opengles.GL10; 7 8import android.hardware.Sensor; 9import android.hardware.SensorEvent; 10import android.hardware.SensorEventListener; 11import android.hardware.SensorManager; 12import android.opengl.GLSurfaceView; 13import android.opengl.GLU; 14import android.opengl.GLSurfaceView.Renderer; 15import android.os.Bundle; 16import android.app.Activity; 17import android.content.Context; 18import android.content.pm.ActivityInfo; 19import android.util.Log; 20import android.widget.Toast; 21 22public class MainActivity extends Activity { 23 private MainSurface surface = null; 24 25 @Override 26 protected void onCreate(Bundle savedInstanceState) { 27 super.onCreate(savedInstanceState); 28 29 //画面の向きを縦に固定 30 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 31 32 surface = new MainSurface(getApplicationContext()); 33 surface.setRenderer(surface); 34 surface.setFocusable(true); 35 surface.setKeepScreenOn(true); 36 setContentView(surface); 37 } 38 39 @Override 40 protected void onResume() { 41 super.onResume(); 42 surface.onResume(); 43 } 44 45 @Override 46 protected void onPause() { 47 super.onPause(); 48 surface.onPause(); 49 } 50 51 private class MainSurface extends GLSurfaceView implements Renderer, SensorEventListener { 52 //センサー 53 private SensorManager sensorManager = null; 54 //センサーのフラグ 55 private boolean sensorMRegisted = false; 56 private boolean sensorARegisted = false; 57 58 //回転行列 59 private static final int MATRIX_SIZE = 16; 60 float[] inR = new float[MATRIX_SIZE]; 61 float[] outR = new float[MATRIX_SIZE]; 62 float[] I = new float[MATRIX_SIZE]; 63 64 //センサーの値保持 65 private float[] orientationValues = new float[3]; 66 private float[] magneticValues = new float[3]; 67 private float[] accelerometerValues = new float[3]; 68 69 //傾きの角度 70 private int[] orientDgrees = new int[3]; 71 72 //ポリゴン 73 private float box[] = new float[] { 74 //前面 75 -0.5f, -0.5f, 0.5f, 0.5f, -0.5f, 0.5f, -0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 76 //背面 77 -0.5f, -0.5f, -0.5f, -0.5f, 0.5f, -0.5f, 0.5f, -0.5f, -0.5f, 0.5f, 0.5f, -0.5f, 78 //左面 79 -0.5f, -0.5f, 0.5f, -0.5f, 0.5f, 0.5f, -0.5f, -0.5f, -0.5f, -0.5f, 0.5f, -0.5f, 80 //右面 81 0.5f, -0.5f, -0.5f, 0.5f, 0.5f, -0.5f, 0.5f, -0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 82 //上面 83 -0.5f, 0.5f, 0.5f, 0.5f, 0.5f, 0.5f, -0.5f, 0.5f, -0.5f, 0.5f, 0.5f, -0.5f, 84 //下面 85 -0.5f, -0.5f, 0.5f, -0.5f, -0.5f, -0.5f, 0.5f, -0.5f, 0.5f, 0.5f, -0.5f, -0.5f, 86 }; 87 88 private FloatBuffer cubeBuff; //頂点座標バッファ 89 90 public MainSurface(Context context) { 91 super(context); 92 Log.d(MainSurface.class.getName(), "constractor"); 93 94 //バッファの生成 95 cubeBuff = makeFloatBuffer(box); 96 } 97 98 @Override 99 public void onSurfaceCreated(GL10 gl, EGLConfig config) { 100 Log.d(MainSurface.class.getName(), "onSurfaceCreated"); 101 } 102 103 @Override 104 public void onDrawFrame(GL10 gl) { 105 //背面塗り潰し 106 gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 107 108 //モデルビュー行列の指定 109 gl.glMatrixMode(GL10.GL_MODELVIEW); 110 gl.glLoadIdentity(); 111 GLU.gluLookAt(gl, 0, 0, 3, 0, 0, 0, 0, 1, 0); 112 113 //頂点配列の指定 114 gl.glVertexPointer(3, GL10.GL_FLOAT, 0, cubeBuff); 115 gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 116 117 gl.glPushMatrix(); 118 119 gl.glRotatef(orientDgrees[1], -1.0f, 0.0f, 0.0f); 120 gl.glRotatef(orientDgrees[2], 0.0f, -1.0f, 0.0f); 121 gl.glRotatef(orientDgrees[0], 0.0f, 0.0f, -1.0f); 122 123 //前面と背面のプリミティブの描画 124 gl.glColor4f(1.0f, 0, 0, 1.0f); 125 gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4); 126 gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 4, 4); 127 128 //左面と右面のプリミティブの描画 129 gl.glColor4f(0, 1.0f, 0, 1.0f); 130 gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 8, 4); 131 gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 12, 4); 132 133 //上面と下面のプリミティブの描画 134 gl.glColor4f(0, 0, 1.0f, 1.0f); 135 gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 16, 4); 136 gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 20, 4); 137 138 gl.glPopMatrix(); 139 } 140 141 @Override 142 public void onSurfaceChanged(GL10 gl, int width, int height) { 143 // ここから四角形を表示? 144 gl.glMatrixMode(GL10.GL_PROJECTION); 145 gl.glLoadIdentity(); 146 gl.glViewport(0, 0, width, height); 147 GLU.gluPerspective(gl, 45.0f, ((float) width) / height, 1f, 100f); 148 149 //背面塗り潰し色の指定 150 gl.glClearColor(1.0f, 1.0f, 1.0f, 1.0f); 151 152 //デプスバッファ 153 gl.glEnable(GL10.GL_DEPTH_TEST); 154 gl.glEnable(GL10.GL_CULL_FACE); 155 gl.glDepthFunc(GL10.GL_LEQUAL); 156 gl.glClearDepthf(1.0f); 157 158 //シェーディング 159 gl.glShadeModel(GL10.GL_SMOOTH); 160 } 161 162 @Override 163 public void onResume() { 164 super.onResume(); 165 166 //センサーのインスタンス初期化 167 if (sensorManager == null) { 168 sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 169 } 170 171 //磁界センサーのリスナー登録 172 List<Sensor> sensorsMagnetic = sensorManager.getSensorList(Sensor.TYPE_MAGNETIC_FIELD); 173 //加速度センサーのリスナー登録 174 List<Sensor> sensorsAcceler = sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER); 175 176 if (sensorsMagnetic.size() > 0 && sensorsAcceler.size() > 0) { 177 sensorMRegisted = sensorManager.registerListener(this, sensorsMagnetic.get(0), SensorManager.SENSOR_DELAY_FASTEST); 178 sensorARegisted = sensorManager.registerListener(this, sensorsAcceler.get(0), SensorManager.SENSOR_DELAY_FASTEST); 179 } else { 180 //センサーが不足していればメッセージを表示 181 Toast.makeText(getApplicationContext(), "Sensors are running short!", Toast.LENGTH_LONG).show(); 182 } 183 } 184 185 @Override 186 public void onPause() { 187 super.onPause(); 188 189 //センサー解除 190 if (sensorMRegisted || sensorARegisted) { 191 sensorManager.unregisterListener(this); 192 sensorMRegisted = false; 193 sensorARegisted = false; 194 } 195 } 196 197 /* 198 * onSensorChanged()はセンサの値が変更された際に呼び出されるメソッド 199 */ 200 @Override 201 public void onSensorChanged(SensorEvent event) { 202 switch (event.sensor.getType()) { 203 case Sensor.TYPE_MAGNETIC_FIELD: 204 magneticValues = event.values.clone(); 205 break; 206 case Sensor.TYPE_ACCELEROMETER: 207 accelerometerValues = event.values.clone(); 208 break; 209 } 210 211 //センサーから得た値を端末の傾き角度に変換する処理 212 if (magneticValues != null && accelerometerValues != null) { 213 SensorManager.getRotationMatrix(inR, I, accelerometerValues, magneticValues); 214 //Activityの表示が縦固定の場合。横向きになる場合は要修正 215 SensorManager.remapCoordinateSystem(inR, SensorManager.AXIS_X, SensorManager.AXIS_Z, outR); 216 217 SensorManager.getOrientation(outR, orientationValues); 218 219 //ラジアンを角度に変換 220 orientDgrees[0] = (int) Math.toDegrees(orientationValues[0]); 221 orientDgrees[1] = (int) Math.toDegrees(orientationValues[1]); 222 orientDgrees[2] = (int) Math.toDegrees(orientationValues[2]); 223 } 224 } 225 226 @Override 227 public void onAccuracyChanged(Sensor sensor, int accuracy) { 228 } 229 } 230 231 private static FloatBuffer makeFloatBuffer(float[] values) { 232 ByteBuffer bb = ByteBuffer.allocateDirect(values.length * 4); 233 bb.order(ByteOrder.nativeOrder()); 234 FloatBuffer fb = bb.asFloatBuffer(); 235 fb.put(values); 236 fb.position(0); 237 return fb; 238 } 239}

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

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

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

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

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

yona

2016/09/28 02:38

Javaのソースコードも追記してください
退会済みユーザー

退会済みユーザー

2016/09/29 00:44

文字数が多いと出てたのでコード記述でも多過ぎるとダメだと思っていました。すみません
guest

回答1

0

下記の勘違いをしていませんか?
・レイアウトファイルを作成するだけでActivityが自動で読み取って、画面に表示してくれる。
・Activity#setContentViewは画面にViewを追加するメソッドでsetContentViewを複数回使用することで画面に複数のViewを追加できる。

上記のどちらかの勘違いをしていたら以前の質問でうまくいかなかったことも納得できます。

投稿2016/09/28 02:49

yona

総合スコア18155

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

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

退会済みユーザー

退会済みユーザー

2016/09/29 00:49

後者は分かりませんが多分前者だと思います。
yona

2016/09/29 01:05

やっぱりレイアウトファイルを使用していませんね。 setContentViewの引数にレイアウトファイルを渡してあげてください。 また、レイアウトファイル内のSurfaceViewタグをMainSurfaceの完全修飾名にしてください。 併せてMainSurfaceのprivate属性を外し、publicにしてください。
退会済みユーザー

退会済みユーザー

2016/09/29 04:28

ありがとうございます。 まずはsetContentViewの引数にレイアウトファイルを渡すというのは setContentView(surface);のsurfaceという部分をactivity_main.xmlにかえるということでしょうか?
yona

2016/09/29 05:07

その通りです。
退会済みユーザー

退会済みユーザー

2016/09/29 05:19

かしこまりました。 次のレイアウトファイル内のSurfaceViewタグをMainSurfaceの完全修飾名にするというところなのですが 変えるのはimport android.opengl.GLSurfaceView;のSurfaceViewというところですか?
yona

2016/09/29 05:29

違います。 MainSurfaceの完全修飾名をレイアウトファイルのSurfaceViewのところに上書きします。
退会済みユーザー

退会済みユーザー

2016/09/29 05:34

すみません。わからないので場所指定してもらってもよろしいですか?
yona

2016/09/29 05:51

レイアウトファイルのSurfaceViewタグをMainSurfaceの完全修飾名に変えるとしか言えないです。 自身でもカスタムViewをxmlで使う方法を調べてください。
退会済みユーザー

退会済みユーザー

2016/09/30 00:13

勘違いしていました xmlファイルの空白を入れて14行目をMainSurfaceの完全修飾名に変えるということですか?
yona

2016/09/30 00:19

レイアウトファイルの<SurfaceViewの箇所を書き換えてください。
退会済みユーザー

退会済みユーザー

2016/09/30 00:50

完全修飾名は <com.example.pc~.MainSurface でいいのでしょうか
yona

2016/09/30 01:17

私にはわからないですよ。 たぶん、そんな感じだと思います。
退会済みユーザー

退会済みユーザー

2016/09/30 01:29

ありがとうございます それではMainSurfaceのprivate属性を外し、publicにするというのは private MainSurface surface = null; の部分であっているでしょうか
yona

2016/09/30 01:34

クラスの宣言部分の方です。 全部聞いてなんとかしようと思っていませんか?とりあえず実行してエラーについて調べてわからなかったら聞くの方が効率いいですよ。
退会済みユーザー

退会済みユーザー

2016/09/30 01:43

すみません。 とりあえず調べます
退会済みユーザー

退会済みユーザー

2016/09/30 03:59

それとは別にsetContentViewの引数にレイアウトファイルを渡すところで Cannot resolve sinbol のエラーが出ていました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問