android如音符般的震动

原创 2015年11月18日 20:16:29

android如音符的震动

概要

近来在做一个全屏录音的炫酷view时,感觉开始录音时太平淡,所以准备加入一个震动的效果,去网上搜了一下,例子还是挺多,但自己真正开始做的时候发现了许多细节方面的网上的文章都没有说清楚,很多人也可能只是复制粘贴,没有自己去尝试过,在经过一系列探索以后,把使用的心得记录一下。

官网介绍

首先我们来看看官网对于震动的介绍Vibrator.

类概述

这个类是操作设备上的震动的一个类。如果你的进程退出,任何你启动的震动都会停止。如果你想要获得一个系统的震动实例,可以调用%29”>getSystemService这个函数,使用VIBRATOR_SERVICE作为参数。

方法概述

abstract void   cancel() //关闭震动
Turn the vibrator off.

abstract boolean    hasVibrator()  //检查设备是否支持震动
Check whether the hardware has a vibrator.

void    vibrate(long[] pattern, int repeat, AudioAttributes attributes) //一下均是通过参数来构建震动
Vibrate with a given pattern.

void    vibrate(long[] pattern, int repeat) //震动参数,从哪震动参数数组的下标开始重复震动
Vibrate with a given pattern.

void    vibrate(long milliseconds)  //震动一段时间
Vibrate constantly for the specified period of time.

void    vibrate(long milliseconds, AudioAttributes attributes) 
Vibrate constantly for the specified period of time.

具体的意思在官网中的函数解释很明确了,这里挑一段分析一下:

public void vibrate (long[] pattern, int repeat)

    Added in API level 1
    Vibrate with a given pattern.

    Pass in an array of ints that are the durations for which to turn on or off the vibrator in milliseconds. The first value indicates the number of milliseconds to wait before turning the vibrator on. The next value indicates the number of milliseconds for which to keep the vibrator on before turning it off. Subsequent values alternate between durations in milliseconds to turn the vibrator off or to turn the vibrator on.

    To cause the pattern to repeat, pass the index into the pattern array at which to start the repeat, or -1 to disable repeating.

    This method requires the caller to hold the permission VIBRATE.

    Parameters
    pattern an array of longs of times for which to turn the vibrator on or off.
    repeat  the index into pattern at which to repeat, or -1 if you don't want to repeat.

这里的long[] pattern说明这是一个数组,其中的数字个数可以写很多,比如说我定义了一个long[] pattern = {100,200,100,500}。这里我定义了有四个数字的数组,从官网解释中可知:

  • 第一个参数表明手机震动电机关闭的毫秒数
  • 第二个参数表明手机震动点击开启的毫秒数
  • 后面的参数按照第一第二个参数依次类推,即第三个是关,第四个是开

  • repeat参数一开始很容易让人误以为是重复的次数,其实这是不对的,从解释中我们可以看到官网是这样解释的这个repeat参数是在pattern数组中的一个下标索引,也就是说如果我定义repeat为2的话,以后就一直从pattern[3]开始到最后进行循环播放,就会一直进行100,500,100,500,100,500·····

所以我要仔细看官方文档具体怎么解释比较好,既然我们掌握了震动的规律,这样我们就可以让震动变得如音符那样具有节奏感了。这时,我们可以找一首曲子的乐谱过来,可以看到五线谱中都有节拍,每个节拍都可以换算成具体的毫秒数,具体的涉及乐理的知识就不在这里赘述了,比如我们需要定义一首曲子的话就可以在规则数组中定义乐曲了哈哈。

代码实现

单独使用震动还是很简单的,也不需要获取什么NotificationManager等,直接去系统服务获取震动的实例就行,下面就贴一下简单的实现代码。

/**
     * 添加录音震动
     * VIBRATE P1: the number of milliseconds to wait before turning the vibrator on
     *         P2: the number of milliseconds for which to keep the vibrator on before turning it off
     *         P+: alternate between durations in milliseconds to turn the vibrator off or to turn the vibrator on
     *
     *         To cause the pattern to repeat, pass the index into the pattern array at which to start the repeat, or -1 to disable repeating
     */
    private void sendYibrateNotification(){
        long[] pattern = {0,500};
        Vibrator vibrate = (Vibrator) mContext.getSystemService(Service.VIBRATOR_SERVICE);
        vibrate.vibrate(pattern,-1);
    }

这边我实现的效果就是不重复的简单震动500毫秒
最后不要忘了加入相关权限

<uses-permission android:name="android.permission.VIBRATE" />

总结

android的很多设备都是很开放的,开发者可以自己去定义自己的想要达到的效果,这也是android系统的迷人之处。最后附上一张刚做完的自定义的全屏录音控件,因为在模拟器中截的屏且用的是台式机,没有声音输入设备,所以声音没法录入,录音时的音波条一直是平的,实习效果很炫酷,其中的难点就是在使用时要针对于不同的view的拦截事件进行处理,比如在listview中。如果喜欢这样的效果欢迎索要。
这里写图片描述

相关文章推荐

音乐播放时跳动的音符

最近做音乐研究了下音乐跳动时的view。这里记录下,以后查找方便: import java.util.Random; import android.content.Context; import ...

Android开发中常见问题小结

1、 Failed to install on device 'emulator-5554': timeout 解决办法:eclipse -> window -> Prefe...

android Vibrator开启振动功能

前言Android开启振动主要运用了Vibrator(振动器),系统中有一个Vibrator抽象类,我们可以通过获取Vibrator实例调用里面的方法来完成振动功能。Vibrator vibrator...
  • Ruomiz
  • Ruomiz
  • 2017年08月01日 16:05
  • 186

android 震动功能示例代码

  • 2014年12月01日 16:11
  • 1.18MB
  • 下载

使用android 调用震动的例子

调用Android系统的震动,只需要一个类 那就是Vibrator ,这个类在hard包中,一看系统级的服务,又要通过manifest.xml文件设置权限了 view plaincopy t...

Android震动vibrator系统开发全过程

一、前言 本人刚学习安卓驱动开发,水平不能说菜,是根本没有水平,在这里把学习过程贴出来,跟大家一起学习交流,还望大家多多指正,转载的请标明出处。 二、android驱动介绍 安卓总体架构是在 L...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android如音符般的震动
举报原因:
原因补充:

(最多只允许输入30个字)