SurfaceViewとか
画像とかを連続して描画するのには、SurfaceViewというものを使うといいらしい。他にもTextureViewとかCustomViewとかあるらしいんだけどよく分からん。なんかAndroidのバージョンごとに推奨された変遷があるらしい。みんな使ってそうで、ネット上でも解説記事がある程度見つかるSurfaceViewを使ってみたい。
無理でした
途中まで頑張ったんだけど、やり方がよくわからなくなってしまった。SurfaceView.javaを新しく作ってそこに処理を書いて、MainActivity.javaでsetContentViewする感じにしたんだけど。センサーの値の取得をMainに書いてて、その値をSurfaceの方に渡すやり方がわからない。MainActivityの中でSurfaceViewを扱うやり方も分からない。ので別のやり方を探す。
参考
Android 7.0 では TextureView よりも SurfaceView が推奨されるらしい。 - なるようになるかも
まじかよ!ってなったので。 たぶん、大半の人にとってはどうでもよいです。 公式リファレンスの Android N for Developers の英語版には以下の記述があります。(いまのところ日本語には訳されていないです) Android 7.0 brings synchronous movement to the S...
https://blog.keiji.io/2015/12/mincomi-adventcalendar-20.html
SurfaceViewで高速描画する(1) | TechBooster
SurfaceViewは高速に描画を行うための仕組みです。 通常のViewでは処理が間に合わない、ゲームやマルチメディアなど高速処理に向いています。別スレッドで描画するため、資源の排他処理などマルチスレッドを意識する必要があります。
SurfaceViewで高速描画する(2) 処理落ちを考慮したタイマ処理 | TechBooster
SurfaceViewのサンプルとして紹介するのはインベーダーゲーム・マリオブラザーズのようにユーザーのアクションが無くても時間が経過していくアクションゲームロジックです。 Threadを使った連続描画(無限ループ)や処理落ちを考慮した移動量調整について解説します
ImageViewを使う
適当に作った画像を用意。
<ImageView android:id="@+id/imageView" android:layout_width="0dp" android:layout_height="0dp" android:layout_marginStart="8dp" android:layout_marginEnd="8dp" android:layout_marginBottom="8dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/textView" app:srcCompat="@drawable/needle" />
ImageViewを設置。
imageView = findViewById(R.id.imageView); bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.needle); imagewidth = bitmap1.getWidth(); imageheight = bitmap1.getHeight();
onCreateでimageViewの取得とdrawableから画像を取得。
azimuth = (float) Math.toDegrees(attitude[0]); matrix.setRotate(-azimuth, imagewidth / 2, imageheight / 2); Bitmap bitmap2 = Bitmap.createBitmap(bitmap1, 0, 0, imagewidth, imageheight, matrix, true); imageView.setImageBitmap(bitmap2);
onSensorChangedで方位角からMatrixを使ってsetRotateで新たにBitmap作る。でImageViewにセット。これ計算合ってるかな。
回った!!なんかカクカクwあと見て分かる通り、回転するごとに画像が拡大縮小してしまう。すっごい方角がずれる。いっぱい動かしたりすると、アプリが固まる。うーん、なんか思ったような感じになってくれないなぁ。めんどくさくなってきたなぁ。
参考

[Android] MatrixでImageView画像を回転、フリップ、拡大縮小させる
画像を拡大縮小、回転させたりするときは、Matrixを使うことができます。ただし基本的に画像処理はパフォーマンス、メモリを使いますので注意しましょう。
コメント