国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android開發中方向傳感器定義與用法詳解

2020-02-21 17:21:44
字體:
來源:轉載
供稿:網友

Android中傳感器是很好的應用,一般應用在指南針中,今天武林技術頻道小編就帶大家來看看Android開發中方向傳感器定義與用法詳解,希望能幫到大家。

補充說明:圖中的坐標軸x,y,z和傳感器中的X,Y,Z沒有任何聯系!

如上圖所示,綠色部分表示一個手機,帶有小圈那一頭是手機頭部

傳感器中的X:如上圖所示,規定X正半軸為北,手機頭部指向OF方向,此時X的值為0,如果手機頭部指向OG方向,此時X值為90,指向OH方向,X值為180,指向OE,X值為270

傳感器中的Y:現在我們將手機沿著BC軸慢慢向上抬起,即手機頭部不動,尾部慢慢向上翹起來,直到AD跑到BC右邊并落在XOY平面上,Y的值將從0~180之間變動,如果手機沿著AD軸慢慢向上抬起,即手機尾部不懂,直到BC跑到AD左邊并且落在XOY平面上,Y的值將從0~-180之間變動,這就是方向傳感器中Y的含義。

傳感器中的Z:現在我們將手機沿著AB軸慢慢向上抬起,即手機左邊框不動,右邊框慢慢向上翹起來,直到CD跑到AB右邊并落在XOY平面上,Z的值將從0~180之間變動,如果手機沿著CD軸慢慢向上抬起,即手機右邊框不動,直到AB跑到CD左邊并且落在XOY平面上,Z的值將從0~-180之間變動,這就是方向傳感器中發Z的含義。

了解了方向傳感器中X,Y,Z的含義之后下面我們就開始學習如何使用

首先我們創建一個傳感器管理器和一個傳感器監聽器,管理器用來管理傳感器以及創建各種各樣的傳感器,監聽器用來監視傳感器的變化并且進行相應的操作

private SensorManager sensorManager;private MySensorEventListener mySensorEventListener;mySensorEventListener= new MySensorEventListener();//這個監聽器當然是我們自己定義的,在方向感應器感應到手機方向有變化的時候,我們可以采取相應的操作,這里緊緊是將x,y,z的值打印出來private final class MySensorEventListener implements SensorEventListener{@Override//可以得到傳感器實時測量出來的變化值public void onSensorChanged(SensorEvent event) {//方向傳感器if(event.sensor.getType()==Sensor.TYPE_ORIENTATION){//x表示手機指向的方位,0表示北,90表示東,180表示南,270表示西float x = event.values[SensorManager.DATA_X];float y = event.values[SensorManager.DATA_Y];float z = event.values[SensorManager.DATA_Z];//tv_orientation是界面上的一個TextView標簽,不再贅述tv_orientation.setText("Orientation:"+x+","+y+","+z);}}

我們在onResume方法中創建一個方向傳感器,并向系統注冊監聽器

protected void onResume() {  Sensor sensor_orientation=sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);  sensorManager.registerListener(mySensorEventListener,sensor_orientation, SensorManager.SENSOR_DELAY_UI);super.onResume();}

最后我們在onPause()中注銷所有傳感器的監聽,釋放方向感應器資源!

protected void onPause() {//注銷所有傳感器的監聽sensorManager.unregisterListener(mySensorEventListener);super.onPause();}

到此,有關方向傳感器的介紹完畢!

完整實例代碼點擊此處本站下載

附:Android基于方向傳感器實現指南針功能

step1:新建一個項目Compass,并將一張指南針圖片導入到res/drawable-hdpi目錄中

step2:設計應用的UI界面,main.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:orientation="vertical"  android:layout_width="fill_parent"  android:layout_height="fill_parent"  android:gravity="center"  ><ImageView  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:src="@drawable/compass"  android:id="@+id/imageView"  /></LinearLayout>

step3:MainActivity.java

import android.app.Activity;import android.content.Context;import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.hardware.SensorManager;import android.os.Bundle;import android.view.animation.Animation;import android.view.animation.RotateAnimation;import android.widget.ImageView;public class MainActivity extends Activity {  private ImageView imageView;  /** 傳感器管理器 */  private SensorManager manager;  private SensorListener listener = new SensorListener();  @Override  public void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.main);    imageView = (ImageView) this.findViewById(R.id.imageView);    imageView.setKeepScreenOn(true);//屏幕高亮    //獲取系統服務(SENSOR_SERVICE)返回一個SensorManager 對象    manager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);  }  @Override  protected void onResume() {    /**     * 獲取方向傳感器     * 通過SensorManager對象獲取相應的Sensor類型的對象     */    Sensor sensor = manager.getDefaultSensor(Sensor.TYPE_ORIENTATION);    //應用在前臺時候注冊監聽器    manager.registerListener(listener, sensor,        SensorManager.SENSOR_DELAY_GAME);    super.onResume();  }  @Override  protected void onPause() {    //應用不在前臺時候銷毀掉監聽器    manager.unregisterListener(listener);    super.onPause();  }  private final class SensorListener implements SensorEventListener {    private float predegree = 0;    @Override    public void onSensorChanged(SensorEvent event) {      /**       * values[0]: x-axis 方向加速度         values[1]: y-axis 方向加速度         values[2]: z-axis 方向加速度       */      float degree = event.values[0];// 存放了方向值      /**動畫效果*/      RotateAnimation animation = new RotateAnimation(predegree, degree,          Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);      animation.setDuration(200);      imageView.startAnimation(animation);      predegree=-degree;      /**      float x=event.values[SensorManager.DATA_X];      float y=event.values[SensorManager.DATA_Y];      float z=event.values[SensorManager.DATA_Z];      Log.i("XYZ", "x="+(int)x+",y="+(int)y+",z="+(int)z);      */    }    @Override    public void onAccuracyChanged(Sensor sensor, int accuracy) {    }  }}

step4:AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"   package="cn.roco.sensor"   android:versionCode="1"   android:versionName="1.0">  <uses-sdk android:minSdkVersion="8" />  <application android:icon="@drawable/icon" android:label="@string/app_name">    <activity android:name="MainActivity"         android:label="@string/app_name">      <intent-filter>        <action android:name="android.intent.action.MAIN" />        <category android:name="android.intent.category.LAUNCHER" />      </intent-filter>    </activity>  </application></manifest>

上文是武林技術頻道小編介紹的Android開發中方向傳感器定義與用法詳解,小編將在未來繼續伴隨大家,為大家搜集、整理到大家喜歡的知識。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 太仆寺旗| 开封县| 沐川县| 宜城市| 黑山县| 泗阳县| 沧州市| 沂源县| 资阳市| 丰宁| 吉林省| 封开县| 大姚县| 汉中市| 南丰县| 南京市| 祁门县| 晋州市| 新田县| 赣州市| 临漳县| 宜丰县| 任丘市| 嘉兴市| 文登市| 曲靖市| 三门峡市| 深州市| 苏尼特右旗| 德保县| 万山特区| 宾阳县| 鹤峰县| 桂林市| 辽宁省| 梧州市| 仁寿县| 礼泉县| 新河县| 成安县| 阿克陶县|