前提
Android で加速度センサを用いた玉転がしゲームを作成しています。
それにサーフェスを使うためにいろいろ調べながら書いているのですが、調べて出てきた getHolder() を自分のコードで書いてみたところ、そこがエラーになってしまいました。
どうしてこうなってしまったのでしょうか?正しい書き方をお教えくださいませ。
実現したいこと
サーフェスを追加するための正しい書き方を知りたい。
発生している問題・エラーメッセージ
該当のソースコード
MainActivity.java
Java
1package com.example.accball; 2 3import androidx.annotation.NonNull; 4import androidx.appcompat.app.AppCompatActivity; 5import androidx.core.widget.TextViewCompat; 6 7import android.hardware.Sensor; 8import android.hardware.SensorEvent; 9import android.hardware.SensorEventListener; 10import android.hardware.SensorManager; 11import android.os.Bundle; 12import android.util.Log; 13import android.view.SurfaceHolder; 14import android.view.SurfaceView; 15import android.widget.TextView; 16 17public class MainActivity extends AppCompatActivity implements SensorEventListener, SurfaceHolder.Callback { 18 19 private int surfaceWidth = 0; 20 private int surfaceHeight = 0; 21 22 23 @Override 24 protected void onCreate(Bundle savedInstanceState) { 25 super.onCreate(savedInstanceState); 26 setContentView(R.layout.activity_main); 27 28 //サーフェス 29 SurfaceHolder holder = getHolder(); 30 holder.addCallback(this); 31 } 32 33 34 35 //センサーの値が変わった時に呼ばれる 36 public void onSensorChanged(SensorEvent event) { 37 if (event == null) { 38 return; 39 } 40 41 //ログにも出力 42 Log.d("MainActivity", 43 "x = ${event.values[0].toString()}" + 44 "y = ${event.values[1].toString()}" + 45 "z = ${event.values[2].toString()}" 46 ); 47 48 } 49 50 //サーフェスが作成されたとき 51 @Override 52 public void surfaceCreated(@NonNull SurfaceHolder holder) { 53 //センサーマネジャーのインスタンスを取得 54 SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 55 //加速センサを指定 56 Sensor accSensor = sensorManager.getDefaultSensor( 57 Sensor.TYPE_ACCELEROMETER); 58 //リスナーをセット 更新頻度は3-30ms 59 sensorManager.registerListener(this, accSensor, SensorManager.SENSOR_DELAY_GAME); 60 } 61 62 //サーフェスが変更されたとき 63 @Override 64 public void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width, int height) { 65 float surfaceWidth = width; 66 float surfaceHeight = height; 67 } 68 69 //サーフェスがはかいされたとき 70 @Override 71 public void surfaceDestroyed(@NonNull SurfaceHolder holder) { 72 //センサーマネジャーのインスタンスを取得 73 SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 74 // Listenerを解除してセンサーの値の監視を終了 75 sensorManager.unregisterListener(this); 76 } 77 78} 79 80 81 @Override 82 public void onAccuracyChanged(Sensor sensor, int accuracy) { 83 //これがないとエラーになるので形だけ 84 } 85}
activity_main.xml
xml
1<?xml version="1.0" encoding="utf-8"?> 2<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent" 7 tools:context=".MainActivity"> 8 9 <SurfaceView 10 android:id="@+id/surfaceView" 11 android:layout_width="0dp" 12 android:layout_height="0dp" 13 app:layout_constraintBottom_toBottomOf="parent" 14 app:layout_constraintEnd_toEndOf="parent" 15 app:layout_constraintStart_toStartOf="parent" 16 app:layout_constraintTop_toTopOf="parent" /> 17</androidx.constraintlayout.widget.ConstraintLayout>
試したこと
SurfaceHolder holder = this.getHolder();
holder = getHolder();
など書いてみましたがだめでした
###追記
SurfaceHolder holder = surfaceview.getHolder();と試してみましたがcannnot resolve symbolと言われてしまいました。
extend surfaceViewと書いてみましたがCannot resolve method 'getHolder' in 'MainActivity'と言われてしまいました。
ここにより詳細な情報を記載してください。
次のように書き換えたところpublic class MainActivityのかっこが閉じるところで. class or interfacce expectedというエラーになりました

回答2件
あなたの回答
tips
プレビュー