现在的位置: 首页 > 综合 > 正文

GL音乐播放器–代码实现<五>–重力甩歌

2014年04月05日 ⁄ 综合 ⁄ 共 1239字 ⁄ 字号 评论关闭

甩歌这个有趣的功能是基本每个音乐播放器都有的,那么今天我们来说一下如何实现重力甩歌功能。

在我的播放器里我实现了两种甩歌方式,一个是甩歌控制暂停播放,一个是甩歌控制切歌。并且这两个功能可以在设置里进行切换和关闭。

话不多说,上代码:

 //重力感应代码
    private static final int SHAKE_THRESHOLD = 4000;//这个控制精度,越小表示反应越灵敏
	private long lastUpdate=0;
	private double last_x=0;
	private double last_y= 4.50;
	private double last_z=9.50;
		public void onAccuracyChanged(Sensor sensor, int accuracy) {
		// TODO Auto-generated method stub
		//处理精准度改变
	}


	public void onSensorChanged(SensorEvent event) {
		// TODO Auto-generated method stub
		if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){
			long curTime = System.currentTimeMillis();
			
			// 每100毫秒检测一次   
			if ((curTime - lastUpdate) > 100) { 
			long diffTime = (curTime - lastUpdate);  
			lastUpdate = curTime;   
			double x=event.values[SensorManager.DATA_X];
			double y=event.values[SensorManager.DATA_Y];
			double z=event.values[SensorManager.DATA_Z];
			float speed = (float) (Math.abs(x+y+z - last_x - last_y - last_z) / diffTime * 10000);   			  
			if (speed > SHAKE_THRESHOLD) {   
				
                        //检测到摇晃后执行的代码
				 if(isplay==1){
					 if(Shake_pause==20&&Shake_next!=20)
					 {					
					  pause();
					 }
					 if(Shake_next==20&&Shake_pause!=20)
					  playNext();
					  isplay=0;
					
				  }else {
					  if(Shake_pause==20)
					  rePlay();
					  isplay=1;	
				  }
				 if(Shake_pause==20&&Shake_next==20)
				 {
					 Toast.makeText(MusicPlayActivity.this, "不好意思,甩动切歌和甩动暂停只能开启一个!", Toast.LENGTH_SHORT).show();
				 }
			}  
			last_x = x;   
			last_y = y;   
			last_z = z;   
			}
		}
	}

注意:Shake_pause为20说明甩歌暂停功能开启,为10说明功能关闭。Shake_next同理。

抱歉!评论已关闭.