Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android學習筆記-傳感器開發之利用傳感器和Tween開發簡易指南針

Android學習筆記-傳感器開發之利用傳感器和Tween開發簡易指南針

編輯:關於Android編程

次我們學習Android傳感器的開發,前面已經介紹過了,tween的使用,所以,我們可以結合傳感器與tween動畫,開發簡易的指南針。   首先先介紹一下傳感器的相關知識,           在Android應用程序中使用傳感器要依賴於android.hardware.SensorEventListener接口。通過該接口可以監聽傳感器的各種事件。SensorEventListener接口的代碼如下:     package android.hardware;   public interface SensorEventListener  {      public void onSensorChanged(SensorEvent event);      public void onAccuracyChanged(Sensor sensor, int accuracy);       }           在SensorEventListener接口中定義了兩個方法:onSensorChanged和onAccuracyChanged。當傳感器的值發生變化時onSensorChanged。當傳感器的精度變化時會調用onAccuracyChanged方法。       onSensorChanged方法只有一個SensorEvent類型的參數event,其中SensorEvent類有一個values變量非常重要,該變量的類型是float[]。但該變量最多只有3個元素,而且根據傳感器的不同,values變量中元素所代表的含義也不同。   我們以方向傳感器為例來說明value的含義:       values[0]:該值表示方位,也就是手機繞著Z軸旋轉的角度。0表示北(North);90表示東(East);180表示南(South);270表示西(West)。       values[1]:該值表示傾斜度,或手機翹起的程度。當手機繞著X軸傾斜時該值發生變化。values[1]的取值范圍是-180≤values[1]<180    values[2]:表示手機沿著Y軸的滾動角度。取值范圍是-90≤values[2]≤90。   下面我們結合實例說明使用情況, 布局文件:   <ImageView        android:id="@+id/iv"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:src="@drawable/point" />      <TextView        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:textSize="50dp" />      <TextView        android:id="@+id/tv"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:textSize="20dp" /> 其中的圖片是在百度中隨便找的一個方位的圖片,      然後是activity中的實現:      @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        iv = (ImageView) findViewById(R.id.iv);        tv = (TextView) findViewById(R.id.tv);                 sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);        //得到方向傳感器  光傳感器Sensor.TYPE_LIGHT value[0],代表光線強弱        Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);                 listener = new MyListener();        sensorManager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_GAME);    }      private class MyListener implements SensorEventListener{        float startangle = 0;          //傳感器數據變化時,        @Override        public void onSensorChanged(SensorEvent event) {            // TODO Auto-generated method stub            float[] values = event.values;            float angle = values[0];            System.out.println("與正北的角度:"+angle);            RotateAnimation ra = new RotateAnimation(startangle, angle,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);            ra.setDuration(100);            iv.startAnimation(ra);            tv.setText("與正北方向的角度是:"+angle);            tv.setTextColor(Color.BLACK);            startangle = -angle;        }        //傳感器精確度變化的時候        @Override        public void onAccuracyChanged(Sensor sensor, int accuracy) {            // TODO Auto-generated method stub                     }             }    @Override    protected void onDestroy() {        // 防止程序在後台運行,消耗內存,在程序退出時,釋放資源。        sensorManager.unregisterListener(listener);        sensorManager = null;        super.onDestroy();             }
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved