android 摇一摇+震动+声音效果
文章链接:https://mp.weixin.qq.com/s/n6EXvfmpNPtWM1kEnGgwUA
摇一摇红包效果已经是老生常谈的了,利用手机的传感器识别摇一摇,同时过程中进行动画+震动+声音的效果。Ps:百度网页版「摇一摇」三个字,会有效果的,皮一哈!
效果图:
摇一摇主要通过SensorManager监听手机,实现 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,可以继续摇一摇。
注册监听,同时别忘了取消注册。
@Override protected void onResume() {//注册监听加速度传感器sensorManager.registerListener(shakeListener, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),SensorManager.SENSOR_DELAY_FASTEST);super.onResume(); }@Override protected void onPause() {//取消注册sensorManager.unregisterListener(shakeListener);super.onPause(); }摇一摇过程可以执行动画效果。
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); }一次摇一摇后,这里在弹框消失后可继续摇一摇。
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) {//这里让弹框取消后,才可以执行下一次的摇一摇isShake = false;mAlertDialog.cancel();}});Window window = mAlertDialog.getWindow();window.setBackgroundDrawable(new ColorDrawable(0x00000000)); }至此,一套摇一摇效果完成!
github地址:https://github.com/taixiang/shake
欢迎关注我的个人博客:https://www.manjiexiang.cn/
更多精彩欢迎关注微信号:春风十里不如认识你
一起学习,一起进步,欢迎上车,有问题随时联系,一起解决!!!
总结
以上是生活随笔为你收集整理的android 摇一摇+震动+声音效果的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 计算机最优配置,2019年度电脑配置最优
- 下一篇: 使用PS3手柄在PC玩Unity3D游戏