Android加速度センサの使用:揺れ機能の実現
4210 ワード
一、原理紹介:
Androidの携帯電話では揺れ機能が一般的になっていますが、最近ではこの機能に触れています.原理は簡単です.加速度センサーを使って、携帯電話を揺らすとき、加速度の各方向の変化を監視し、加速度値が設定の感度を超えると、揺れ機能をトリガーします.
二、使用したクラス:
SensorManager
SensorEventListener
三、機能実現:
1、揺れ機能:揺れ機能をクラスShakeUtilsにカプセル化し、使用時に注釈の説明に従って使用すればよい.ShakeUtils.javaは以下の通りである(悪いパッケージはCTRL+SHIFT+O導入してください):
2、BaseActivity:プログラムの拡張を容易にするために、すべてのActivityにベースクラスを書きました.
3、ShakeBeautyActivity:ShakeUtilsの具体的な使用:
四、demoダウンロード:
揺れてデモ
Androidの携帯電話では揺れ機能が一般的になっていますが、最近ではこの機能に触れています.原理は簡単です.加速度センサーを使って、携帯電話を揺らすとき、加速度の各方向の変化を監視し、加速度値が設定の感度を超えると、揺れ機能をトリガーします.
二、使用したクラス:
SensorManager
SensorEventListener
三、機能実現:
1、揺れ機能:揺れ機能をクラスShakeUtilsにカプセル化し、使用時に注釈の説明に従って使用すればよい.ShakeUtils.javaは以下の通りである(悪いパッケージはCTRL+SHIFT+O導入してください):
/**
*
* :
* private ShakeUtils mShakeUtils = null;
* 1、 Activity :
* mShakeUtils = new ShakeUtils( this );
* mShakeUtils.setOnShakeListener(new OnShakeListener{
* public void onShake(){
* //
* }
* });
*
* 2、 Activity onResume onPause onResume onPause :
* mShakeUtils.onResume();
* mShakeUtils.onPause();
* */
public class ShakeUtils implements SensorEventListener {
public ShakeUtils( Context context ){
mSensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
}
public void setOnShakeListener( OnShakeListener onShakeListener ){
mOnShakeListener = onShakeListener;
}
public void onResume(){
mSensorManager.registerListener(this,
mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_NORMAL);
}
public void onPause(){
mSensorManager.unregisterListener(this);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
public void onSensorChanged(SensorEvent event) {
int sensorType = event.sensor.getType();
//values[0]:X ,values[1]:Y ,values[2]:Z
float[] values = event.values;
if (sensorType == Sensor.TYPE_ACCELEROMETER){
//
if ((Math.abs(values[0]) > SENSOR_VALUE || Math.abs(values[1]) > SENSOR_VALUE || Math.abs(values[2]) > SENSOR_VALUE)){
System.out.println("sensor value == " + " " + values[ 0 ] + " " + values[ 1 ] + " " + values[ 2 ] );
if( null != mOnShakeListener ){
mOnShakeListener.onShake( );
}
}
}
}
public interface OnShakeListener{
public void onShake();
}
private SensorManager mSensorManager = null;
private OnShakeListener mOnShakeListener = null;
private static final int SENSOR_VALUE = 14;
}
2、BaseActivity:プログラムの拡張を容易にするために、すべてのActivityにベースクラスを書きました.
public abstract class BaseActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
init();
}
private void init(){
setContentView( );
findViews( );
getData( );
showContent( );
}
public abstract void setContentView();
public abstract void findViews();
public abstract void getData();
public abstract void showContent();
}
3、ShakeBeautyActivity:ShakeUtilsの具体的な使用:
public class ShakeBeautyActivity extends BaseActivity {
@Override
public void setContentView() {
setContentView( R.layout.activity_shake_beauty_layout );
}
@Override
public void findViews() {
mShakeImageView = ( ImageView )findViewById( R.id.shakeImgId );
initShakeUtils( );
}
@Override
public void getData() {
}
@Override
public void showContent() {
}
@Override
protected void onResume() {
super.onResume();
mShakeUtils.onResume( );
}
@Override
protected void onPause() {
super.onPause();
mShakeUtils.onPause( );
}
private void initShakeUtils(){
mShakeUtils = new ShakeUtils( this );
mShakeUtils.setOnShakeListener( new OnShakeListener( ) {
@Override
public void onShake() {
setShakeImage( );
}
});
}
private void setShakeImage( ){
Random random = new Random( );
mShakeImageView.setBackgroundResource( mBeautys[ ( Math.abs(random.nextInt( ) ) )%mBeautys.length ] );
}
private ImageView mShakeImageView = null;
private ShakeUtils mShakeUtils = null;
private static final int[] mBeautys = new int[]{
R.drawable.beauty_01
,R.drawable.beauty_02
,R.drawable.beauty_03
,R.drawable.beauty_04
,R.drawable.beauty_05
,R.drawable.beauty_06
,R.drawable.beauty_07
,R.drawable.beauty_08
,R.drawable.beauty_09
};
}
四、demoダウンロード:
揺れてデモ