Android アプリ CrenaCam この色 何色 0.9.1

手ぶれ防止機能を実装しました。誰でも思いつくであろう、加速度が安定した時にシャッターをきる方法です。結構効果はあります。^^ http://dip.picolix.jp/disp9.html
iPhoneでは、こちらに記事がありました。
ちょっとオーバーアクションになりますが、↓のようになります。
giji-off.jpg
giji-off-v.jpg

↑のような状態では、シャッターは切られず安定してから切られます。↓
giji-on.jpg
giji-on-v.jpg
アプリ的には、
sensorManager.registerListener(this,
accelerometer,SensorManager.SENSOR_DELAY_UI);
..
..
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}
@Override
public void onSensorChanged(SensorEvent sensorevent) {
//加速度センサー
if(sensorevent.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
/** 重力加速度
g = Math.sqrt(Math.pow(sensorevent.values[SensorManager.DATA_X],2) +
Math.pow(sensorevent.values[SensorManager.DATA_Y],2) +
Math.pow(sensorevent.values[SensorManager.DATA_Z],2));
*/
double XX = sensorevent.values[SensorManager.DATA_X];
double YY = sensorevent.values[SensorManager.DATA_Y];
double ZZ = sensorevent.values[SensorManager.DATA_Z];
g = XX * XX + YY * YY + ZZ * ZZ;
}
}
を実装して、g値が一定範囲に収まるのを取得しようとしたんですが、
ボタンクリックイベント中(シャッターを切る)では、g値は更新されず・・。
仕方がないので、この部分はスレッドにしたらg値は問題なく取れました。
private void Button02_OnClick(){
stability();
mCameraPreview.takePicture(); //撮影
mCameraPreview.mProgress = false;
}
これを以下に変更
private void Button02_OnClick(){
final Handler mHandler = new Handler();
new Thread(new Runnable() {
public void run() {
stability();
mHandler.post(new Runnable() {
public void run() {
mCameraPreview.takePicture(); //撮影
mCameraPreview.mProgress = false;
}
});
}}).start();
}
..
..
..
private void stability() {
SharedPreferences pref =PreferenceManager.getDefaultSharedPreferences(this);
if(!(pref.getBoolean(“check2”, false)) || accle_flg != true){
return;
}
double g_now = g;
double g_buf;
int g_count = 0;
long start = System.currentTimeMillis();
while(System.currentTimeMillis() – start < 5000){ //5秒まで待つ
try {
Thread.sleep(10);
}catch(
InterruptedException e)
{
}
g_buf = Math.abs(g_now – g);
logv(String.format(“:####### %3.3f”, g));
if(g_buf < 3.0){
g_count ++;
}else{
g_count = 0;
}
if(g_count > 30){
break; //手ぶれ安定
}
g_now = g;
}
}