文章链接:https://mp.weixin.qq.com/s/n6EXvfmpNPtWM1kEnGgwUA

摇一摇红包效果已经是老生常谈的了,利用手机的传感器识别摇一摇,同时过程中进行动画+震动+声音的效果。Ps:百度网页版「摇一摇」三个字,会有效果的,皮一哈!

效果图:

摇一摇主要通过SensorManager监听手机,实现 SensorEventListener,在onSensorChanged去判断,根据加速度来判断摇晃的程度。

  1. ShakeSensorListener shakeListener = new ShakeSensorListener();
  2. SensorManager sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
  3. private class ShakeSensorListener implements SensorEventListener {
  4. @Override
  5. public void onSensorChanged(SensorEvent event) {
  6. //避免一直摇
  7. if (isShake) {
  8. return;
  9. }
  10. // 开始动画
  11. anim.start();
  12. float[] values = event.values;
  13. /*
  14. * x : x轴方向的重力加速度,向右为正
  15. * y : y轴方向的重力加速度,向前为正
  16. * z : z轴方向的重力加速度,向上为正
  17. */
  18. float x = Math.abs(values[0]);
  19. float y = Math.abs(values[1]);
  20. float z = Math.abs(values[2]);
  21. //加速度超过19,摇一摇成功
  22. if (x > 19 || y > 19 || z > 19) {
  23. isShake = true;
  24. //播放声音
  25. playSound(MainActivity.this);
  26. //震动,注意权限
  27. vibrate( 500);
  28. //仿网络延迟操作,这里可以去请求服务器...
  29. new Handler().postDelayed(new Runnable() {
  30. @Override
  31. public void run() {
  32. //弹框
  33. showDialog();
  34. //动画取消
  35. anim.cancel();
  36. }
  37. },1000);
  38. }
  39. }
  40. @Override
  41. public void onAccuracyChanged(Sensor sensor, int accuracy) {
  42. }
  43. }

如果手机一直在摇晃,会不停的调用onSensorChanged ,而我们只想要一次摇一摇的效果,所以加了isShake 字段去判断。 在一次摇一摇事件完成后置false,可以继续摇一摇。

注册监听,同时别忘了取消注册。

  1. @Override
  2. protected void onResume() {
  3. //注册监听加速度传感器
  4. sensorManager.registerListener(shakeListener, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
  5. SensorManager.SENSOR_DELAY_FASTEST);
  6. super.onResume();
  7. }
  8. @Override
  9. protected void onPause() {
  10. //取消注册
  11. sensorManager.unregisterListener(shakeListener);
  12. super.onPause();
  13. }

摇一摇过程可以执行动画效果。

  1. ObjectAnimator anim = ObjectAnimator.ofFloat(imgHand,"rotation",0f,45f,-30f,0f);
  2. anim.setDuration(500);
  3. anim.setRepeatCount(ValueAnimator.INFINITE);

播放声音,这里放在raw 资源文件里的。

  1. private void playSound(Context context) {
  2. MediaPlayer player = MediaPlayer.create(context,R.raw.shake_sound);
  3. player.start();
  4. }

震动效果,这里注意要在AndroidManifest 文件里添加权限 <uses-permission android:name="android.permission.VIBRATE" />

  1. private void vibrate(long milliseconds) {
  2. Vibrator vibrator = (Vibrator)getSystemService(Service.VIBRATOR_SERVICE);
  3. vibrator.vibrate(milliseconds);
  4. }

一次摇一摇后,这里在弹框消失后可继续摇一摇。

  1. private void showDialog() {
  2. final AlertDialog mAlertDialog = new AlertDialog.Builder(this).show();
  3. View view = LayoutInflater.from(this).inflate(R.layout.layout_dialog,null);
  4. mAlertDialog.setContentView(view);
  5. mAlertDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
  6. @Override
  7. public void onCancel(DialogInterface dialog) {
  8. //这里让弹框取消后,才可以执行下一次的摇一摇
  9. isShake = false;
  10. mAlertDialog.cancel();
  11. }
  12. });
  13. Window window = mAlertDialog.getWindow();
  14. window.setBackgroundDrawable(new ColorDrawable(0x00000000));
  15. }

至此,一套摇一摇效果完成!

github地址:https://github.com/taixiang/shake

欢迎关注我的个人博客:https://www.manjiexiang.cn/

更多精彩欢迎关注微信号:春风十里不如认识你

一起学习,一起进步,欢迎上车,有问题随时联系,一起解决!!!

android 摇一摇+震动+声音效果的更多相关文章

  1. Android摇一摇振动效果Demo

    前言     在微信刚流行的时候,在摇一摇还能用来那啥的时候,我也曾深更半夜的拿着手机晃一晃.当时想的最多的就是.我靠,为神马摇一下须要用这么大的力度,当时我想可能腾讯认为那是个人性的设计.后来才发觉 ...

  2. Android的加速度传感器模拟摇一摇的效果-android学习之旅(66)

    主要介绍一下android的加速传感器的简单用法,模拟摇一摇 ,如果x,y,z三个方向的加速度超过了15,就会弹出Toast,当然你可以设置更复杂的策略,比如判断间隔 代码如下 public clas ...

  3. 玩转Android之加速度传感器的使用,模仿微信摇一摇

    Android系统带的传感器有很多种,最常见的莫过于微信的摇一摇了,那么今天我们就来看看Anroid中传感器的使用,做一个类似于微信摇一摇的效果. OK ,废话不多说,我们就先来看看效果图吧: 当我摇 ...

  4. Android 摇一摇之双甩功能

    Android 摇一摇之双甩功能 最近做一个摇一摇的功能 网上相关代码很多 但是这次的需求有点奇葩 要求是摇两次才生效 看起来好像很简单 但真正要做遇到的问题还是很多 时间限制 机型灵敏性 摇动的方式 ...

  5. iOS摇一摇功能、震动功能、简单的摇动动画、生成二维码图片与发送短信等几个功能

    有一个开锁的功能,具体的需求就类似于微信的"摇一摇"功能:摇动手机,手机震动,手机上的锁的图片摇动一下,然后发送开锁指令.需求简单,但用到了许多方面的知识. 1.摇一摇 相对这是最 ...

  6. iOS几个功能:1.摇一摇;2.震动;3.简单的摇动动画;4.生成二维码图片;5.发送短信;6.播放网络音频等

    有一个开锁的功能,具体的需求就类似于微信的“摇一摇”功能:摇动手机,手机震动,手机上的锁的图片摇动一下,然后发送开锁指令.需求简单,但用到了许多方面的知识. 1.摇一摇 相对这是最简单的功能了. 在v ...

  7. Android 摇一摇 之 传感器片

    要监视原始的传感器数据,你需要实现两个通过SensorEventListener接口暴露的回调方法:onAccuracyChanged()和onSensorChanged(). 传感器数据的速度值,这 ...

  8. android手电筒(摇一摇也可开启手电筒)

    package com.firefly.myflashlight; import android.app.Activity; import android.hardware.Camera; impor ...

  9. Android仿iPhone晃动撤销输入功能(微信摇一摇功能)

    重力传感器微信摇一摇SensorMannager自定义alertdialogSensorEventListener 很多程序中我们可能会输入长文本内容,比如短信,写便笺等,如果想一次性撤销所有的键入内 ...

随机推荐

  1. [Swift]LeetCode9. 回文数 | Palindrome Number

    Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same back ...

  2. [Swift]LeetCode780. 到达终点 | Reaching Points

    A move consists of taking a point (x, y) and transforming it to either (x, x+y) or (x+y, y). Given a ...

  3. ubuntu(版本14.04)部署Core环境

    遇到问题: 参照官方文档敲完命令之后 出现了提示的问题Unable to lpcate package... ,随后参照官方文档解决方案,又出现了如下问题: 提示找不到依赖的Runtime,在尝试过很 ...

  4. 优化之Normalizer组件

    Normalizer会产生记录,尽可能的将Normalizer组件靠近Target ---------------------------------------------------------- ...

  5. pytthon—day8 读写模式的结合、文件操作模式、with完成文本文件复制、游标操作

    一.读写模式的结合 w:写指没有新建文件,有文件就清空 w=open('1.txt','w',encoding='utf-8') w.write('000\n') 在写入数据时,需要及时处理内存空间, ...

  6. PHP 编码规范

    这是给小组制定的php编码规范 该 PHP 编码规范基本上是同 PSR 规范的.有一部分的编码规范 PSR 中是建议,此编码规范会强制要求. 此编码规范 是以 PSR-1 / PSR-2 / PSR- ...

  7. 探讨.net Socket支持在线连接数量

    发现不少同学在用.NET做通讯的时候都关心一个问题,.NET能支持多少个在线连接.其实.net的通讯由winsocket所支持,既然由低层的winsocket所支持那.NET其端的接入连接数的受限完全 ...

  8. Mongodb~Linux环境下的部署

    < mongodb服务脚本的制作> Mongodb这个文档型非关系型数据库,可以说它是最像关系型的了,之前大叔主要讲如何使用mongodb,而没有说过如何去部署和安装它,而今天大叔有必要讲 ...

  9. 解决GOOGLE无法访问

    修改hosts文件 https://github.com/txthinking/google-hosts  

  10. Spring Cloud学习笔记-010

    分布式配置中心:Spring Cloud Config Spring Cloud Config是Spring Cloud团队创建的一个全新的项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外 ...