[解決済み] アンドロイドでシェイクを検出するには?
2022-07-14 14:04:18
質問
アンドロイドで手ぶれを検出するにはどうしたらよいですか?また、シェイクの方向はどのように検出するのでしょうか?
手ぶれ時にimageviewの画像を変更したいのですが。
どのように解決するのですか?
コードの観点からは、SensorListenerを実装する必要があります。
public class ShakeActivity extends Activity implements SensorListener
SensorManagerを取得する必要があります。
sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);
そして、このセンサーを任意のフラグで登録します。
sensorMgr.registerListener(this,
SensorManager.SENSOR_ACCELEROMETER,
SensorManager.SENSOR_DELAY_GAME);
onSensorChange()メソッドでは、手ぶれかどうかを判断していますね。
public void onSensorChanged(int sensor, float[] values) {
if (sensor == SensorManager.SENSOR_ACCELEROMETER) {
long curTime = System.currentTimeMillis();
// only allow one update every 100ms.
if ((curTime - lastUpdate) > 100) {
long diffTime = (curTime - lastUpdate);
lastUpdate = curTime;
x = values[SensorManager.DATA_X];
y = values[SensorManager.DATA_Y];
z = values[SensorManager.DATA_Z];
float speed = Math.abs(x+y+z - last_x - last_y - last_z) / diffTime * 10000;
if (speed > SHAKE_THRESHOLD) {
Log.d("sensor", "shake detected w/ speed: " + speed);
Toast.makeText(this, "shake detected w/ speed: " + speed, Toast.LENGTH_SHORT).show();
}
last_x = x;
last_y = y;
last_z = z;
}
}
}
手ぶれ補正の閾値は次のように定義されています。
private static final int SHAKE_THRESHOLD = 800;
他にも、手ぶれを検出する方法はいくつかあります。 のリンクです。 (リンクがうまくいかない場合やリンク切れの場合は このウェブアーカイブを見る .).
これを見てください の例です。 を見てください。
注意
SensorListener
は非推奨です。
SensorEventListener
を使うことができます。
SensorEventListenerを使った簡単な例です。
ありがとうございます。
関連
-
[解決済み] android.os.NetworkOnMainThreadException' を修正するにはどうすればよいですか?
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] インスタンス状態の保存を使用してアクティビティ状態を保存するにはどうすればよいですか?
-
[解決済み] Androidのローテーションでアクティビティを再開する
-
[解決済み] Androidで現在の時刻と日付を取得する方法
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み] Genymotion、Mavericksで「Unable to load VirtualBox engine. VBoxは正しくセットアップされています。
-
[解決済み] Android: ActionBarのホームアイコンをアプリのアイコンでないものに変更するには?
-
[解決済み] Android Studio 1.0とエラー "Library projects cannot set applicationId "について
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】デバイスを振ったときにアプリを更新するには?
-
[解決済み] handler.postDelayed()を停止する。
-
[解決済み] 通知をクリックした後にアプリケーションを開く
-
[解決済み] フラグメントからツールバーを取得する方法
-
[解決済み] 確認(yes/no)用のDialogPreferenceを実装するには?
-
[解決済み] Android: ActionBarのホームアイコンをアプリのアイコンでないものに変更するには?
-
[解決済み] Android Studioのユニットテスト: データ(入力)ファイルの読み込み
-
[解決済み] Android Studio 1.0とエラー "Library projects cannot set applicationId "について
-
[解決済み] Android端末のシリアルナンバーを調べるには?
-
[解決済み] PreferenceFragmentCompatはpreferenceThemeが設定されている必要があります。