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 摇一摇+震动+声音效果相关推荐
- android 摇一摇动画效果,Android实现微信摇一摇功能
本文实例为大家分享了Android实现微信摇一摇功能的具体代码,供大家参考,具体内容如下 1.初始化界面 设置摇一摇界面的背景图片和摇动时的上下两半张图片 xmlns:tools="http ...
- Android之手机摇一摇震动刷新(支持ListView、GridView、WebView)并生成我的二维码
手机摇一摇震动刷新 第一步:看摇一摇震动刷新的前后的效果图 1.摇一摇震动刷新前的效果图如下(图片太大了,分2次录屏的,如果看着不爽请猛戳我的github上面的演示) 2.摇一摇震动刷新之后的效果图如 ...
- Android摇一摇振动效果Demo
前言 在微信刚流行的时候,在摇一摇还能用来那啥的时候,我也曾深更半夜的拿着手机晃一晃.当时想的最多的就是,我靠,为神马摇一下需要用这么大的力度,当时我想可能腾讯觉得那是个人性的设计,后来才发觉尼马重力 ...
- 玩转Android之加速度传感器的使用,模仿微信摇一摇
Android系统带的传感器有很多种,最常见的莫过于微信的摇一摇了,那么今天我们就来看看Anroid中传感器的使用,做一个类似于微信摇一摇的效果. OK ,废话不多说,我们就先来看看效果图吧: 当我摇 ...
- 传感器的使用,高仿微信摇一摇,动画加声音
很多时候我们的应用需要使用传感器,使手机应用更加方便和可玩性更高, Google为我们提供了十一种传感器 #define SENSOR_TYPE_ACCELEROMETER 1 //加速度#defin ...
- Android 微信摇一摇功能实现
开发之前 今天学习了一下传感器, 脑子里就蹦出了微信的摇一摇, 于是鼓了鼓勇气抽空写了出来, 本人菜鸟一枚, 希望大神们多多指点 开发环境 Android Studio 2.2.1 JDK1.7 AP ...
- android 微信摇一摇代码,Android实现微信摇一摇功能
本文实例为大家分享了Android实现微信摇一摇功能的具体代码,供大家参考,具体内容如下 1.初始化界面 设置摇一摇界面的背景图片和摇动时的上下两半张图片 xmlns:tools="http ...
- iOS oc 手机摇一摇震动带音效功能
导入 #import <QuartzCore/QuartzCore.h> #import <AudioToolbox/AudioToolbox.h> 核心代码 - (void) ...
- 【Android App】物联网中查看手机支持的传感器及实现摇一摇功能-加速度传感器(附源码和演示 超详细)
需要源码请点赞关注收藏后评论区留言~~~ 一.传感器的种类 传感器Sensor是一系列感应器的总称,是Android设备用来感知周围环境和运动信息的工具. 因为具体的感应信息依赖于相关硬件,所以虽然A ...
最新文章
- 视觉SLAM如何基于深度学习闭环检测?
- SQL临时表的生存期问题
- 用servlet校验密码2
- 使用谷歌浏览器模拟微信(android或ios)浏览器
- vs2010中自动缩进模式由tab改为space
- python爬人人贷代码视频_利用python爬取人人贷网的数据
- 怎么从零基础学计算机打字,新手学电脑打字 0基础打字快速上手教程
- 微商选择满意商品的方法
- 堪萨斯州立大学 计算机科学,堪萨斯州立大学
- tsconfig.json文件配置参数的注解
- 测试固态硬盘寿命软件,SSD能用多久在哪看 检测固态硬盘寿命方法
- http首部字段详解与cookie
- 计算机房宣传标语,机房安全标语
- JavaScript “佛祖保佑 永无bug”
- U8 业务单据编码 相关表
- Windows10彻底卸载VMWare虚拟机
- 模糊C均值聚类以及C实现
- 【转载】看懂通信协议:自定义通信协议设计之TLV编码应用
- 创新领导力|学习华为蓝军思维,价值100万的“小报告”如何修正老板的决议?
- codeforces 1550B. Maximum Cost Deletion
热门文章
- linux-运维自动化之ansible
- RPG Maker MV/ MZ 工程打包 Android APK 文件(使用 Website 2 APK Builder Pro)
- 失联飞机的情况分析和搜救应对措施
- ConvTranspose2d原理,深度网络如何进行上采样?
- Linux 33 Bash
- 不坑盒子 + 智能写作(Office、WPS插件)助你高效办公,早点下班回家。
- 大话西游-奇葩的周导
- 《Dotnet9》系列-开源C# WPF控件库2《Panuon.UI.Silver》强力推荐
- 如何成为一个内心强大的人
- KiCad 下载安装及镜像站介绍