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

來源:互聯網
上載者:User

標籤:des   android   style   blog   http   color   io   使用   java   

本次我們學習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;    //感應器資料變化時,@Overridepublic void onSensorChanged(SensorEvent event) {// TODO Auto-generated method stubfloat[] 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;}//感應器精確度變化的時候@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {// TODO Auto-generated method stub}        }    @Override    protected void onDestroy() {    // 防止程式在後台運行,消耗記憶體,在程式退出時,釋放資源。    sensorManager.unregisterListener(listener);    sensorManager = null;    super.onDestroy();        }

 最後當我們手機的方向發生變化時,圖片也在移動,同時下面的文字框,會顯示相應的方位值。

  

    

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.