文章链接: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 摇一摇+震动+声音效果相关推荐

  1. android 摇一摇动画效果,Android实现微信摇一摇功能

    本文实例为大家分享了Android实现微信摇一摇功能的具体代码,供大家参考,具体内容如下 1.初始化界面 设置摇一摇界面的背景图片和摇动时的上下两半张图片 xmlns:tools="http ...

  2. Android之手机摇一摇震动刷新(支持ListView、GridView、WebView)并生成我的二维码

    手机摇一摇震动刷新 第一步:看摇一摇震动刷新的前后的效果图 1.摇一摇震动刷新前的效果图如下(图片太大了,分2次录屏的,如果看着不爽请猛戳我的github上面的演示) 2.摇一摇震动刷新之后的效果图如 ...

  3. Android摇一摇振动效果Demo

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

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

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

  5. 传感器的使用,高仿微信摇一摇,动画加声音

    很多时候我们的应用需要使用传感器,使手机应用更加方便和可玩性更高, Google为我们提供了十一种传感器 #define SENSOR_TYPE_ACCELEROMETER 1 //加速度#defin ...

  6. Android 微信摇一摇功能实现

    开发之前 今天学习了一下传感器, 脑子里就蹦出了微信的摇一摇, 于是鼓了鼓勇气抽空写了出来, 本人菜鸟一枚, 希望大神们多多指点 开发环境 Android Studio 2.2.1 JDK1.7 AP ...

  7. android 微信摇一摇代码,Android实现微信摇一摇功能

    本文实例为大家分享了Android实现微信摇一摇功能的具体代码,供大家参考,具体内容如下 1.初始化界面 设置摇一摇界面的背景图片和摇动时的上下两半张图片 xmlns:tools="http ...

  8. iOS oc 手机摇一摇震动带音效功能

    导入 #import <QuartzCore/QuartzCore.h> #import <AudioToolbox/AudioToolbox.h> 核心代码 - (void) ...

  9. 【Android App】物联网中查看手机支持的传感器及实现摇一摇功能-加速度传感器(附源码和演示 超详细)

    需要源码请点赞关注收藏后评论区留言~~~ 一.传感器的种类 传感器Sensor是一系列感应器的总称,是Android设备用来感知周围环境和运动信息的工具. 因为具体的感应信息依赖于相关硬件,所以虽然A ...

最新文章

  1. 视觉SLAM如何基于深度学习闭环检测?
  2. SQL临时表的生存期问题
  3. 用servlet校验密码2
  4. 使用谷歌浏览器模拟微信(android或ios)浏览器
  5. vs2010中自动缩进模式由tab改为space
  6. python爬人人贷代码视频_利用python爬取人人贷网的数据
  7. 怎么从零基础学计算机打字,新手学电脑打字 0基础打字快速上手教程
  8. 微商选择满意商品的方法
  9. 堪萨斯州立大学 计算机科学,堪萨斯州立大学
  10. tsconfig.json文件配置参数的注解
  11. 测试固态硬盘寿命软件,SSD能用多久在哪看 检测固态硬盘寿命方法
  12. http首部字段详解与cookie
  13. 计算机房宣传标语,机房安全标语
  14. JavaScript “佛祖保佑 永无bug”
  15. U8 业务单据编码 相关表
  16. Windows10彻底卸载VMWare虚拟机
  17. 模糊C均值聚类以及C实现
  18. 【转载】看懂通信协议:自定义通信协议设计之TLV编码应用
  19. 创新领导力|学习华为蓝军思维,价值100万的“小报告”如何修正老板的决议?
  20. codeforces 1550B. Maximum Cost Deletion

热门文章

  1. linux-运维自动化之ansible
  2. RPG Maker MV/ MZ 工程打包 Android APK 文件(使用 Website 2 APK Builder Pro)
  3. 失联飞机的情况分析和搜救应对措施
  4. ConvTranspose2d原理,深度网络如何进行上采样?
  5. Linux 33 Bash
  6. 不坑盒子 + 智能写作(Office、WPS插件)助你高效办公,早点下班回家。
  7. 大话西游-奇葩的周导
  8. 《Dotnet9》系列-开源C# WPF控件库2《Panuon.UI.Silver》强力推荐
  9. 如何成为一个内心强大的人
  10. KiCad 下载安装及镜像站介绍