zoukankan      html  css  js  c++  java
  • android 摇一摇 代码 真实可用

    核心接口代码:
    package com.hyxf.main;
    import android.content.Context;
    import android.hardware.Sensor;
    import android.hardware.SensorEvent;
    import android.hardware.SensorEventListener;
    import android.hardware.SensorManager;
    import android.util.Log;
    
    public class ShakeListener implements SensorEventListener {
     String TAG = "ShakeListener";
     // 速度阈值,当摇晃速度达到这值后产生作用
     private static final int SPEED_SHRESHOLD = 3000;
     // 两次检测的时间间隔
     private static final int UPTATE_INTERVAL_TIME = 70;
     // 传感器管理器
     private SensorManager sensorManager;
     // 传感器
     private Sensor sensor;
     // 重力感应监听器
     private OnShakeListener onShakeListener;
     // 上下文
     private Context mContext;
     // 手机上一个位置时重力感应坐标
     private float lastX;
     private float lastY;
     private float lastZ;
     // 上次检测时间
     private long lastUpdateTime;
     // 构造器
     public ShakeListener(Context c) {
      // 获得监听对象
      mContext = c;
      start();
     }
     // 开始
     public void start() {
      // 获得传感器管理器
      sensorManager = (SensorManager) mContext
      .getSystemService(Context.SENSOR_SERVICE);
      if (sensorManager != null) {
       // 获得重力传感器
       sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
      }
      // 注册
      if (sensor != null) {
       sensorManager.registerListener(this, sensor,
       SensorManager.SENSOR_DELAY_GAME);
      }
     }
     // 停止检测
     public void stop() {
      sensorManager.unregisterListener(this);
     }
     // 设置重力感应监听器
     public void setOnShakeListener(OnShakeListener listener) {
      onShakeListener = listener;
     }
     // 重力感应器感应获得变化数据
     public void onSensorChanged(SensorEvent event) {
      // 现在检测时间
      long currentUpdateTime = System.currentTimeMillis();
      // 两次检测的时间间隔
      long timeInterval = currentUpdateTime - lastUpdateTime;
      // 判断是否达到了检测时间间隔
      if (timeInterval < UPTATE_INTERVAL_TIME)
       return;
      // 现在的时间变成last时间
      lastUpdateTime = currentUpdateTime;
      // 获得x,y,z坐标
      float x = event.values[0];
      float y = event.values[1];
      float z = event.values[2];
      // 获得x,y,z的变化值
      float deltaX = x - lastX;
      float deltaY = y - lastY;
      float deltaZ = z - lastZ;
      // 将现在的坐标变成last坐标
      lastX = x;
      lastY = y;
      lastZ = z;
      double speed = Math.sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ
      * deltaZ)
      / timeInterval * 10000;
      Log.v(TAG, "===========log===================");
      // 达到速度阀值,发出提示
      if (speed >= SPEED_SHRESHOLD) {
       onShakeListener.onShake();
      }
     }
     public void onAccuracyChanged(Sensor sensor, int accuracy) {
     }
     // 摇晃监听接口
     public interface OnShakeListener {
      public void onShake();
     }
    }
    应用代码:
    public class yaoAcitivity extends Activity {
     ShakeListener mShakeListener = null;
     private TextView tv;
     private ImageView iv;
     @Override
     protected void onCreate(Bundle savedInstanceState) {
      // TODO Auto-generated method stub
      super.onCreate(savedInstanceState);
      this.setContentView(R.layout.main);
      
      tv=(TextView)this.findViewById(R.id.textView1);
      iv=(ImageView)this.findViewById(R.id.imageView1);
      
      mShakeListener = new ShakeListener(this);
      mShakeListener.setOnShakeListener(new shakeLitener());
     }
     private class shakeLitener implements OnShakeListener{
      @Override
      public void onShake() {
       // TODO Auto-generated method stub
       tv.setText("摇一摇成功啦!");
       iv.setImageResource(R.drawable.attitude_laugh);
       mShakeListener.stop();
      }
      
     }
    }

  • 相关阅读:
    Django-models,继承AbstractUser类
    Django-views,用户认证,login_requierd()
    django前篇
    jquery插件
    jquery事件及插件
    jquery操作元素
    jquery选择器筛选器
    js作用域与作用域链
    js之DOM(二)
    bootstrap
  • 原文地址:https://www.cnblogs.com/xiaowangba/p/6314247.html
Copyright © 2011-2022 走看看