シェイク機能は、携帯電話の加速センサーを使用して、それがシェイク状態にあるかどうかを判断し、対応する操作を実行することです。
1.音楽ファイルをRES/RAWの下に置きます。生がない場合は、aを作成します
2。レイアウトファイル
<?xml version = "1.0" encoding = "utf-8"?> <relativelayout xmlns:android = "http://schemas.android.com/apk/res/android" xmlns:tools = "http://schemas.android.com Android:layout_width = "match_parent" android:layout_height = "match_parent"ツール:context = "com.sq.dissertation.activity.shakeactative" android:background = " Android:layout_centerinparent = "true" android:src = "@mipmap/shakehideimg_man2"/> <linearlayout android:layout_width = "match_width =" match_width "android:layout_height =" match_parent "android:gravity =" center: "android =" <<< Android:id = "@+id/hand_up" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:src = "@mipmap/shake_logo_up"/>> <imageview android:id = "@+id/hand_dowd" android: "android:" android: "andRoid:" Android:layout_height = "wrap_content" android:src = "@mipmap/shake_logo_down"/> </linearlayout> </relativeLayout>
3。Javaコード
パブリッククラスのシェイクアクトリティは、appcompatactivityを実装してsensoreventlistener {private imageview ivup;プライベートImageView IVDown;プライベートセンセルマナーセンセルマナー。プライベートバイブレーターバイブレーター;プライベートセンサーセンサー;プライベートメディアプラヤプレーヤー。プライベートオブジェクトアニメーターウパニメーター;プライベートオブジェクトアニメーターダウンアニメーター; @Override Protected void oncreate(bundle savedinstancestate){super.oncreate(savedinstancestate); setContentView(r.layout.activity_shake); ivup =((imageView)findViewByID(R.ID.HAND_UP)); ivdown =((imageView)findViewByID(R.ID.HAND_DOWN)); // sensormanager =((sensormanager)getsystemservice(sensor_service)); //携帯電話のオブジェクトバイブレーターをVibrator =((Vibrator)GetSystemService(Vibrator_Service))にインスタンス化します。 //アクセラレーションセンサーセンサー= sensormanager.getDefaultSensor(sensor.type_acceleromer); /*インスタンス化されたオブジェクト、パラメーター:同時に再生されるストリームの最大数、つまり、同時に再生される音楽の数の上限。ストリームのタイプは一般にaudiomanager.stream_musicを使用してサンプリングレート変換品質を繰り返すことができることを示しますが、この関数はまだ有効になりません。0 */// Soundpool = new Soundpool(1、audiomanager.stream_music、0)を使用することをお勧めします。 //パラメーター3には効果がありません。1// loadId = soundpool.load(shakeactivity.this、r.raw.three、1)を使用することをお勧めします。 player = mediaplayer.create(this、r.raw.music); initAnimation(); } private void initAnimation(){//上部と下の2つの写真のアニメーションupanimator = objectanimator.offloat(ivup、 "翻訳"、0、-200、0); upanimator.setInterPolator(new AcceleratedEcelerateInterPolator()); upanimator.setduration(2000); downAnimator = objectAnimator.offloat(ivdown、 "Translation"、0、200、0); downAnimator.setInterPolator(new AcceleratedEcelerateInterPolator()); downAnimator.setDuration(2000); } @Override Protected void onresume(){super.onresume(); if(sensormanager!= null){//リスナー、モニター、センサー、センサー周波数sensormanager.registerListener(これ、センサー、sensor_delay_normal)を取得します。 }} @Override Protected void onpause(){super.onpause(); if(sensormanager!= null){//リスナーsensormanager.unregisterlistener(this); //オーディオリソースをリリース// soundpool.unload(loadId); }} @Override Protected void ondestroy(){super.ondestroy(); player.release(); } @Override public void onsensOrchanged(sensorevent event){//センサー情報が変化したときにデータを取得します[] values = event.values; // X軸方向のグレインアクセラレーション、正のフロートx =値[0]; // y軸方向の重力加速度は正のfloat y =値[1]です。 // z軸方向の重力加速度は正のフロートz =値[2]です。 //これらの3つの方向の一般的な重力加速度は40に達し、電話int値= 18を振る状態に到達します。 if(math.abs(x)> value || math.abs(y)> value || math.abs(z)> 19){long patter [] = {200、1000}; Vibrator.vibrate(patter、1); upanimator.start(); downAnimator.start(); / * 1F:左チャンネルボリューム1F:右チャネルボリューム1:オーディオ優先度、値が高く、優先度が高く、0:ループ再生時間数が1回、0は再生時間が1回、-1はループ+1回、その他の値は1Fです。 if(player.isplaying()){player.seekto(0); } else {player.start(); }}} @Override public void onaccuracyChanged(センサーセンサー、int精度){}}サプリメント:SoundpoolはJavaコードに登場し、サウンドエフェクトをプレイします。短いサウンドエフェクトをプレイするのに適しています。最大1mのメモリスペースのみを適用できます。一部のファイルはそれ自体が大きくありませんが、デコード後に大きくなるため、一般的に、曲ファイルで再生されません。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。