当前位置: 首页 > news >正文

android中类似 QQ震动窗口的实现,带声音和振动效果

效果就是如标题。好了,直接上代码

其实手机上看着的振动效果就是1个 animation

首先写1个 Interpolator - 定义一个动画的变化率(the rate of change)这使得基本的动画效果(alpha, scale, translate, rotate)得以加速,减速,重复等。(不理解的可以看下面的解释)

cycleinter.xml

<?xml version="1.0" encoding="utf-8"?>
<cycleInterpolator xmlns:android="http://schemas.android.com/apk/res/android" 
android:cycles="10" />


下来就是左右 和 上下一起动:shake.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
	android:fromXDelta="0" android:toXDelta="5" 
	android:fromYDelta="5" android:toYDelta="0" 
	android:duration="1000" 
	android:interpolator="@anim/cycleinter" />

如果只想1种动:

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:fromYDelta="0"
    android:interpolator="@anim/cycleinter"
    android:toYDelta="3" />

这样基本上就完成了动的效果

代码中直接:

Animation shakeAnimation = AnimationUtils.loadAnimation(this, R.anim.shake_xy);
	view.startAnimation(shakeAnimation);


现在再在震动效果的同时 加上 手机震动和 QQ声音提示:

1.在 raw文件夹下放入你的声音文件


2. 代码

	SoundPool  soundPool
		soundPool = new SoundPool(10 , AudioManager.STREAM_SYSTEM , 5);//1 最多同时放出的声音数,2声音类型,3声音质量越高越耗费资源
		soundPool.load(this, R.raw.aa ,1);//context id 级别
		

   
	public void soundPlay(){
		//第1个参数 ID(放入 soundpool的顺序 第一个放入)
		//2,3 左声道 右声道的控制量
		//4 优先级
		//5 是否循环     0 - 不循环    -1 -  循环
		//6 播放比例     0.5-2 一般为1 表示正常播放
 		soundPool.play(1, 1, 1, 1, 0, 1);
	}

	public void zhendong(){
		//别忘记震动权限
		Vibrator  vibrator = (Vibrator)this.getSystemService(VIBRATOR_SERVICE);
		long[] pattern = {50 ,400 ,50 , 400};    //停止 开始  停止 开启
	    vibrator.vibrate(pattern, -1);            //不重复设置为1 -1
		
	}


Interpolator

Interpolator 定义了动画的变化速度,可以实现匀速、正加速、负加速、无规则变加速等。Interpolator 是基类,封装了所有 Interpolator 的共同方法,它只有一个方法,即 getInterpolation (float input),该方法 maps a point on the timeline to a multiplier to be applied to the transformations of an animation。Android 提供了几个 Interpolator 子类,实现了不同的速度曲线,如下:

AccelerateDecelerateInterpolator 在动画开始与介绍的地方速率改变比较慢,在中间的时侯加速
AccelerateInterpolator 在动画开始的地方速率改变比较慢,然后开始加速
CycleInterpolator 动画循环播放特定的次数,速率改变沿着正弦曲线
DecelerateInterpolator 在动画开始的地方速率改变比较慢,然后开始减速
LinearInterpolator 在动画的以均匀的速率改变
对于 LinearInterpolator , 变化率是个常数,即 f (x) = x.
public float getInterpolation(float input) {
return input;
}
Interpolator其他的几个子类,也都是按照特定的算法,实现了对变化率。还可以定义自己的 Interpolator 子类,实现抛物线、自由落体等物理效果。

SoundPool:

android的音频播放对播放行为的控制非常熟悉的方法:start()、stop()和pause()。

可以获得一个新创建的MediaPlayer对象。

在播放过程中,有几个可以监听播放过程的监听器,如:

setOnCompletionListener(MediaPlayer.OnCompletionListener listener),监听音频播放结束;

setOnErrorListener(MediaPlayer.OnErrorListener listener),监听播放过程中的错误事件;

setOnPreparedListener(MediaPlayer.OnPreparedListener listener),当prepare()被调用时触发。

然而,使用MediaPlayer播放时,也有一些问题。我们知道MediaPlayer在创建和销毁时都会耗费大量的系统资源,且创建和销毁的时间相对较长。此外,如果我们需要在同一时刻播放很多声音,MediaPlayer是不支持的。

因此,Android提供了另外一种,叫做SoundPool,它适合播放那些需要反复播放,但时间较短的音效。它支持同时播放多种声音,这些声音在系统开始时会加载到列表中,按照这些声音的id,我们可以调用这些音效。(例子就是上面的代码了,注释很详细)





相关文章:

  • Linux下多任务间通信和同步-概述
  • 一初探js特效魅力之全选不选反选04
  • 360全线产品从小米应用商店下架
  • 阿里IPO弃港赴美?
  • 浅析数据库设计三范式
  • linux enable命令学习
  • Linux操作系统以及各大发行版介绍——Linux operating system and major distribution is introduced...
  • 一初探js特效魅力之选项卡05
  • 一初探js特效魅力之数组06
  • 大根堆排序
  • 初探js特效魅力之定时器的使用one
  • 初探js特效魅力之延时提示框07
  • 网络编程之TCP异步群聊:服务器端代码
  • 网络编程之TCP异步群聊:客户端代码
  • 关于多线程中回调函数的一个小例子
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • Java教程_软件开发基础
  • JS数组方法汇总
  • mysql外键的使用
  • OSS Web直传 (文件图片)
  • PHP面试之三:MySQL数据库
  • TCP拥塞控制
  • vuex 笔记整理
  • 订阅Forge Viewer所有的事件
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 服务器从安装到部署全过程(二)
  • 给新手的新浪微博 SDK 集成教程【一】
  • 前端面试之闭包
  • 什么软件可以剪辑音乐?
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • ​Java并发新构件之Exchanger
  • ​第20课 在Android Native开发中加入新的C++类
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • ​什么是bug?bug的源头在哪里?
  • # 数论-逆元
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (12)Hive调优——count distinct去重优化
  • (70min)字节暑假实习二面(已挂)
  • (javascript)再说document.body.scrollTop的使用问题
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (转)我也是一只IT小小鸟
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .NET Core跨平台微服务学习资源
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • [ IO.File ] FileSystemWatcher
  • [1127]图形打印 sdutOJ