91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android開發中方向傳感器定義與用法詳解【附指南針實現方法】

發布時間:2020-09-08 21:38:39 來源:腳本之家 閱讀:209 作者:東風破 欄目:移動開發

本文實例講述了Android開發中方向傳感器定義與用法。分享給大家供大家參考,具體如下:

Android中的方向傳感器在生活中是一個很好的應用,典型的例子是指南針的使用,我們先來簡單介紹一下傳感器中三個參數x,y,z的含義,以一幅圖來說明。

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相關內容感興趣的讀者可查看本站專題:《Android開發入門與進階教程》、《Android視圖View技巧總結》、《Android編程之activity操作技巧總結》、《Android操作SQLite數據庫技巧總結》、《Android操作json格式數據技巧總結》、《Android資源操作技巧匯總》及《Android控件用法總結》

希望本文所述對大家Android程序設計有所幫助。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

五台县| 揭阳市| 温宿县| 胶州市| 聂荣县| 华池县| 绥德县| 儋州市| 哈尔滨市| 平陆县| 白玉县| 天柱县| 永丰县| 额尔古纳市| 太白县| 嵊州市| 资阳市| 望奎县| 绵竹市| 安国市| 小金县| 务川| 武安市| 泰兴市| 息烽县| 哈密市| 乡宁县| 洞头县| 镇赉县| 昌宁县| 安化县| 茌平县| 漳平市| 肇东市| 敦化市| 通榆县| 巢湖市| 吴忠市| 修文县| 曲阜市| 巴南区|