SensorとMatrixの話

Sensorは、食わず嫌いで避けていた分野なのですが、案外簡単に値が取れることがわかったので、まずは方位に関する部分だけでもと思ってテストプログラムを書いてみるなどしてみました。

サンプルプログラムが豊富にあるので、載せるのやめとこうとか余計なこと考えてますが、念のため。

mSensorManager =
	(SensorManager) getSystemService(SENSOR_SERVICE);

なんて感じでSensorManagerを取ってきたあとに

List<sensor> sensors =
	mSensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER);

と、対応するセンサーリストを取ってくると。TYPE_ACCELEROMETERは加速度センサー、TYPE_ORIENTATIONだと方位と傾きのセンサーになりました。

あとは、mSensorManagerのListenerに登録してやれば、変化があった時点でListenerが呼び出されます。

public void onSensorChanged(SensorEvent event)

が、Listenerです。SensorEventの中身はこちらのリファレンスを見てもらうとして、センサー自体のパラメータで取ってくる必要があるものは、float[] valuesで、これがそれぞれ、X/Y/Z軸になるというところでしょうか。

TYPE_MAGNETIC_FIELDは磁力で、やっぱりX/Y/Z。

TYPE_LIGHTはvalues[0]にlux(ルクス)。

TYPE_PROXIMITYは、距離計ってことでしょうか。values[0]にcm単位で測った距離が入っている。

加速度のZ軸は重力加速度(m/s^2 メートル毎秒毎秒)が基本になってるようで、小数点第二位まで取るようにしてると電話機を動かしてない状態でも9.7と9.8を行ったり来たりします。

引いて押し出す動きをすると0に近づいたあと、大きな値になるのでこれを持ってくるだけでも、今回試したい動きになるんじゃないか。

 

そんなわけで、google codeのtrunkにも入れておきました。Sensorsというところに入れてあります。

で、ここまで書いておいて、Matrixの話書き忘れた。

画像を回転したりして表示する機能がcanvasにはすでにありまして、これを使って方位に応じて画像を回転して表示します。

最初は、drawBitmap(bitmap,matrix.paint)を使おうと思っていたのですが、どうにもうまくいかなかったのでcanvas.setMatrix()で、回転行列を適用させてみたら、とりあえず画像の回転はうまいこと行きました。

ついでにセンサーの値を表示させたいなーと思いますが、実際はこのままじゃ表示できません。なぜなら、Matrixが適用されてしまうので。そこで、canvas.save()とcanvas.restore()は便利なもんだ。というところにつながりまして、なんでそうなるのかはぜひ試してみてもらうとよろしいかと。

 

おもしろくなってきた。

広告

About sato_c

小学生の頃にインベーダーゲームやPC-8001やApple][といったものを知ってしまい、それ以降ずーっとゲーム好き。でも、あんまりうまくはありません。 仕事は当初はゲーム関係のプログラムやサウンドをやっていましたが、WEB関係を通ったあと、遊技機関係のプログラムやサウンドをやっています。あまり節操がないのか。 現在はJavaですてきなコードを書けるように勉強中。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。