Android 用Vibrator實現震動功能 -开发者知识库

Android 用Vibrator實現震動功能 -开发者知识库,第1张

Android手機中的震動由Vibrator實現。設置震動事件,需要知道其震動的時間長短、震動的周期等。
在Android Vibrator中,震動的時間一毫秒計算(1/1000秒),所以如果設置的時間值太小,會感覺不出來。
通過調用Vibrator的vibrate(long[] pattern, int repeat)方法實現。

前一個參數為設置震動的效果的數組,第二個參數為 -1表示只震動一次,為0則震動會一直持續。

1)修改activity_main.xml代碼如下

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<TextView
android:id="@ id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="短震動" />

<ToggleButton
android:id="@ id/toggleButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ToggleButton" />

</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<TextView
android:id="@ id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="長震動" />

<ToggleButton
android:id="@ id/toggleButton2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ToggleButton" />

</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<TextView
android:id="@ id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="節奏震動" />

<ToggleButton
android:id="@ id/toggleButton3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="ToggleButton" />

</LinearLayout>

</LinearLayout>


2)修改MainActivity.java代碼如下

package com.example.androidapp;

import android.os.Bundle;
import android.os.Vibrator;
import android.app.Activity;
import android.view.Menu;
import android.widget.CompoundButton;
import android.widget.ToggleButton;

public class MainActivity extends Activity {
private ToggleButton toggleButton1=null;
private ToggleButton toggleButton2=null;
private ToggleButton toggleButton3=null;
private Vibrator vibrator=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vibrator=(Vibrator)this.getSystemService(VIBRATOR_SERVICE);
toggleButton1=(ToggleButton)findViewById(R.id.toggleButton1);
toggleButton2=(ToggleButton)findViewById(R.id.toggleButton2);
toggleButton3=(ToggleButton)findViewById(R.id.toggleButton3);
/*短震動*/
toggleButton1.setOnCheckedChangeListener(new ToggleButton.OnCheckedChangeListener() {

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
//設置震動周期,第二個參數為 -1表示只震動一次
vibrator.vibrate(new long[]{1000, 10, 100, 1000},-1);
}else{
//取消震動
vibrator.cancel();
}
}
});
/*長震動*/
toggleButton2.setOnCheckedChangeListener(new ToggleButton.OnCheckedChangeListener() {

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//設置震動周期,第二個參數為0則震動會一直持續
if(isChecked){
vibrator.vibrate(new long[] { 100, 100, 100, 1000 }, 0);
}
else {
//取消震動
vibrator.cancel();
}
}
});
/*周期震動*/
toggleButton3.setOnCheckedChangeListener(new ToggleButton.OnCheckedChangeListener() {

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
//設置震動周期
vibrator.vibrate(new long[] { 1000, 50, 1000, 50, 1000 }, 0);
}
else {
//取消震動
vibrator.cancel();
}
}
});
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

}

3)記得添加權限在AndroidManifest.xml中添加代碼如下

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




最佳答案:

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复