Android一直震动源码

package com.vibrator.vibratordemo;

import android.os.Bundle;
import android.os.Vibrator;
import android.app.Activity;
import android.app.Service;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;

public class MainActivity extends Activity implements OnClickListener, OnSeekBarChangeListener {

	private Button btnstart;
	private SeekBar seekbar1;
	private boolean isClick;
	/***************************************************************************
	 * 要让手机乖乖的震动,需创建Vibrator对象,通过调用vibrate方法来达到震动的目的, 在Vibrator的构造器中有4个参数,
	 * 前3个的值是设置震动的大小,在这边可以把数值改成一大一小,这样就可以明显感觉出
	 * 震动的差异,而最后一个值是设置震动的时间。以下的范例设置每个震动的模式都不一样, long[] pattern :自定义震动模式
	 * 。数组中数字的含义依次是[静止时长,震动时长,静止时长,震动时长。。。]时长的单位是毫秒 boolean isRepeat :
	 * 是否反复震动,如果是true,反复震动,如果是false,只震动一次 -1 只震动一次
	 *************************************************************************/
	private Vibrator vibrator;

	private int num = 10;// 震动时间

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		btnstart = (Button) findViewById(R.id.btn_start);
		seekbar1 = (SeekBar) findViewById(R.id.seekbar1);
		btnstart.setOnClickListener(this);

		vibrator = (Vibrator) getSystemService(Service.VIBRATOR_SERVICE);

		seekbar1.setMax(1000);
		seekbar1.setOnSeekBarChangeListener(this);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}

	@Override
	public void onClick(View v) {

		if (!isClick) {
			/* 短震动 */
			// vibrator.vibrate(new long[] { 100, 10, 100, 1000 }, -1);
			/* 短震动循环 */
			vibrator.vibrate(new long[] { num, 25000 }, 0);
			/* 长震动 */
			// vibrator.vibrate(new long[]{100,100,100,1000},0);
			/* 节奏震动 */
			// vibrator.vibrate(new long[]{1000,50,1000,50,1000},0);
			isClick = true;
			btnstart.setText("暂停");
		} else {
			vibrator.cancel();
			isClick = false;
			btnstart.setText("开始");

		}
	}

	@Override
	protected void onPause() {

		vibrator.cancel();

		super.onPause();
	}

	@Override
	public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

	}

	@Override
	public void onStartTrackingTouch(SeekBar seekBar) {

	}

	@Override
	public void onStopTrackingTouch(SeekBar seekBar) {
		Log.i(getClass().getSimpleName(), "seekbar长度发生改变");
		num = seekBar.getProgress();
		Log.i(getClass().getSimpleName(), "num=" + num);
		if (isClick) {

			vibrator.vibrate(new long[] { num, 1000 }, 0);
		}
	}

}

 界面浏览图


 

界面代码

 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <Button
            android:id="@+id/btn_start"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="开始" />

        <SeekBar
            android:id="@+id/seekbar1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>

</RelativeLayout>

 java代码


                

   

猜你喜欢

转载自316031139-qq-com.iteye.com/blog/1716542