fc2ブログ

Androidアプリ開発::加速度センサの謎

 ePadには傾き(Orientation)センサが載っていません。なので、端末の回転を取るには加速度(Accelerometer)センサを使うことになります。ってか、傾きセンサの使用は非推奨になってしまっているようなので、傾きセンサが載っている端末でも、加速度センサを使うほうがいいみたい。

 まずはSensorEventListenerを使って加速度センサからどんな値がやってくるのか調べてみました。3軸なので、配列にx軸、y軸、z軸方向の加速度が入ってくるはず。
Imgp9040.jpg
…なんだコレ?

 Landscapeの状態だとvalues[1](つまりy)に8.49…が、Portrait状態だとvalues[0](つまりx)に同じ固定値が入っているだけで、後は全部ゼロです。ついでに言うなら、Landscapeの逆さにしても、Portraitの逆さにしても、それぞれLandscapeとPortraitと同じ値で、マイナスにはなりません。

 なのですが、そういやGravity sensor settingとかいうアプリがプリインストールされてたっけなと思い立ち、Game modeに変更し、再度試してみました。
Imgp9047.jpg
 なんかそれっぽい値が目まぐるしく小刻みに変化してます。写真も目まぐるしく変化しているっぽく撮れました。ではその状態で、端末を回してみましょうか。

まずはほぼLandscape(横向き)
Imgp9053.jpg
次にほぼPortrait(縦向き)
Imgp9060.jpg
…なんかおかしくないか?

 フツーはPortraitの状態で、右向きがx、上向きがy、手前がzなんだけど
Image4.jpg
ePadではLandscapeの状態で、右向きがx、上向きがy、奥がzになってるみたいです。
Image1.jpg
 端末情報に軸の向きとかの設定があるのかなと思ったけど、とくに見当たらず。調べたところ、中華パッドの一部は座標系が間違っているとかなんとか…

 ありえねー。右手座標系ですらねーじゃんか。

 ちなみにこのGame modeでは、自動縦横切り替えではPortrait位置にしてもPortrait表示になりません。その代わりというかなんというか、Portraitとは逆さの位置にすると、Portrait表示になります。もちろん逆さまですが。うん、間違いないね、機器の固有の仕様(笑)だね。ちなみにGravity sensor modeがNormal modeだと、Portrait位置でもその逆さまでもPortrait表示になるし、Landscapeも同様です。うん、マイナス値にならないようになっていたのはそういうワケだね。この座標系を、中華パッド座標系と呼ぶことにしましょう。もちろんIS03は正常なAndroid座標系でした。

 とはいえ、市場にそういった製品があるのもまた事実。対応できるもんなら対応したいところです。なんとか判別できないかなと考え、z軸の向きが反対であることに着目しました。つまり画面が上を向いているときは、Android座標系ではzはプラス、中華パッド座標系ではマイナスになるワケです。寝転がって仰向けに操作している場合もあるかもしれませんが、加速度センサを使ったアプリを使おうって時には、なにか特殊なアプリでない限りは普通画面を上に向けますよね。なので、zがプラスのときはAndroid座標系端末、マイナスのときは中華パッド座標系端末という判断でいいんじゃないですかね?ダメですかね?

 ということでサンプルを作ってみました。画面をくるくる回しても、常に頭が上になるようにドロイドを回転表示します。Android座標系と中華パッド座標系両方に対応しています。が、前述の中華パッド座標系とは異なる固有座標系を持つ端末は知りません。
Imgp9070.jpgImgp9066.jpg
ダウンロードはこちらから

 しかし適当に買ったこのePad、期待してなかった(したくもなかった)トコで検証端末の実力を遺憾なく発揮してくれますねぇ。実機をこのePadしか持ってない人は絶叫モンですけど。
スポンサーサイト



コメントの投稿

非公開コメント

プロフィール

きくちいさを

Author:きくちいさを
赤メガネー!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

カレンダー
04 | 2023/05 | 06
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -
QRコード
QR
楽天で探す
楽天市場