android 摇一摇+震动+声音效果
文章鏈接:https://mp.weixin.qq.com/s/n6EXvfmpNPtWM1kEnGgwUA
搖一搖紅包效果已經是老生常談的了,利用手機的傳感器識別搖一搖,同時過程中進行動畫+震動+聲音的效果。Ps:百度網頁版「搖一搖」三個字,會有效果的,皮一哈!
效果圖:
搖一搖主要通過SensorManager監(jiān)聽手機,實現(xiàn) SensorEventListener,在onSensorChanged去判斷,根據加速度來判斷搖晃的程度。
ShakeSensorListener shakeListener = new ShakeSensorListener(); SensorManager sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);private class ShakeSensorListener implements SensorEventListener {@Overridepublic void onSensorChanged(SensorEvent event) {//避免一直搖if (isShake) {return;}// 開始動畫anim.start();float[] values = event.values;/** x : x軸方向的重力加速度,向右為正* y : y軸方向的重力加速度,向前為正* z : z軸方向的重力加速度,向上為正*/float x = Math.abs(values[0]);float y = Math.abs(values[1]);float z = Math.abs(values[2]);//加速度超過19,搖一搖成功if (x > 19 || y > 19 || z > 19) {isShake = true;//播放聲音playSound(MainActivity.this);//震動,注意權限vibrate( 500);//仿網絡延遲操作,這里可以去請求服務器...new Handler().postDelayed(new Runnable() {@Overridepublic void run() {//彈框showDialog();//動畫取消anim.cancel();}},1000);}}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {} }如果手機一直在搖晃,會不停的調用onSensorChanged ,而我們只想要一次搖一搖的效果,所以加了isShake 字段去判斷。 在一次搖一搖事件完成后置false,可以繼續(xù)搖一搖。
注冊監(jiān)聽,同時別忘了取消注冊。
@Override protected void onResume() {//注冊監(jiān)聽加速度傳感器sensorManager.registerListener(shakeListener, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_FASTEST);super.onResume(); }@Override protected void onPause() {//取消注冊sensorManager.unregisterListener(shakeListener);super.onPause(); }搖一搖過程可以執(zhí)行動畫效果。
ObjectAnimator anim = ObjectAnimator.ofFloat(imgHand,"rotation",0f,45f,-30f,0f); anim.setDuration(500); anim.setRepeatCount(ValueAnimator.INFINITE);播放聲音,這里放在raw 資源文件里的。
private void playSound(Context context) {MediaPlayer player = MediaPlayer.create(context,R.raw.shake_sound);player.start(); }震動效果,這里注意要在AndroidManifest 文件里添加權限 <uses-permission android:name="android.permission.VIBRATE" />
private void vibrate(long milliseconds) {Vibrator vibrator = (Vibrator)getSystemService(Service.VIBRATOR_SERVICE);vibrator.vibrate(milliseconds); }一次搖一搖后,這里在彈框消失后可繼續(xù)搖一搖。
private void showDialog() {final AlertDialog mAlertDialog = new AlertDialog.Builder(this).show();View view = LayoutInflater.from(this).inflate(R.layout.layout_dialog,null);mAlertDialog.setContentView(view);mAlertDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {@Overridepublic void onCancel(DialogInterface dialog) {//這里讓彈框取消后,才可以執(zhí)行下一次的搖一搖isShake = false;mAlertDialog.cancel();}});Window window = mAlertDialog.getWindow();window.setBackgroundDrawable(new ColorDrawable(0x00000000)); }至此,一套搖一搖效果完成!
github地址:https://github.com/taixiang/shake
歡迎關注我的個人博客:https://www.manjiexiang.cn/
更多精彩歡迎關注微信號:春風十里不如認識你
一起學習,一起進步,歡迎上車,有問題隨時聯(lián)系,一起解決!!!
總結
以上是生活随笔為你收集整理的android 摇一摇+震动+声音效果的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机最优配置,2019年度电脑配置最优
- 下一篇: 使用PS3手柄在PC玩Unity3D游戏