欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android開(kāi)發(fā)中方向傳感器定義與用法詳解【附指南針實(shí)現(xiàn)方法】

 更新時(shí)間:2017年11月02日 09:58:01   作者:東風(fēng)破  
這篇文章主要介紹了Android開(kāi)發(fā)中方向傳感器定義與用法,結(jié)合實(shí)例形式分析了Android方向傳感器的功能、定義與使用方法,并附帶基于方向傳感器實(shí)現(xiàn)指南針功能的方法,需要的朋友可以參考下

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

Android中的方向傳感器在生活中是一個(gè)很好的應(yīng)用,典型的例子是指南針的使用,我們先來(lái)簡(jiǎn)單介紹一下傳感器中三個(gè)參數(shù)x,y,z的含義,以一幅圖來(lái)說(shuō)明。

補(bǔ)充說(shuō)明:圖中的坐標(biāo)軸x,y,z和傳感器中的X,Y,Z沒(méi)有任何聯(lián)系!

如上圖所示,綠色部分表示一個(gè)手機(jī),帶有小圈那一頭是手機(jī)頭部

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

傳感器中的Y:現(xiàn)在我們將手機(jī)沿著B(niǎo)C軸慢慢向上抬起,即手機(jī)頭部不動(dòng),尾部慢慢向上翹起來(lái),直到AD跑到BC右邊并落在XOY平面上,Y的值將從0~180之間變動(dòng),如果手機(jī)沿著AD軸慢慢向上抬起,即手機(jī)尾部不懂,直到BC跑到AD左邊并且落在XOY平面上,Y的值將從0~-180之間變動(dòng),這就是方向傳感器中Y的含義。

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

了解了方向傳感器中X,Y,Z的含義之后下面我們就開(kāi)始學(xué)習(xí)如何使用

首先我們創(chuàng)建一個(gè)傳感器管理器和一個(gè)傳感器監(jiān)聽(tīng)器,管理器用來(lái)管理傳感器以及創(chuàng)建各種各樣的傳感器,監(jiān)聽(tīng)器用來(lái)監(jiān)視傳感器的變化并且進(jìn)行相應(yīng)的操作

private SensorManager sensorManager;
private MySensorEventListener mySensorEventListener;
mySensorEventListener= new MySensorEventListener();//這個(gè)監(jiān)聽(tīng)器當(dāng)然是我們自己定義的,在方向感應(yīng)器感應(yīng)到手機(jī)方向有變化的時(shí)候,我們可以采取相應(yīng)的操作,這里緊緊是將x,y,z的值打印出來(lái)
private final class MySensorEventListener implements SensorEventListener{
@Override
//可以得到傳感器實(shí)時(shí)測(cè)量出來(lái)的變化值
public void onSensorChanged(SensorEvent event) {
//方向傳感器
if(event.sensor.getType()==Sensor.TYPE_ORIENTATION){
//x表示手機(jī)指向的方位,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是界面上的一個(gè)TextView標(biāo)簽,不再贅述
tv_orientation.setText("Orientation:"+x+","+y+","+z);
}
}

我們?cè)趏nResume方法中創(chuàng)建一個(gè)方向傳感器,并向系統(tǒng)注冊(cè)監(jiān)聽(tīng)器

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

最后我們?cè)趏nPause()中注銷(xiāo)所有傳感器的監(jiān)聽(tīng),釋放方向感應(yīng)器資源!

protected void onPause() {
//注銷(xiāo)所有傳感器的監(jiān)聽(tīng)
sensorManager.unregisterListener(mySensorEventListener);
super.onPause();
}

到此,有關(guān)方向傳感器的介紹完畢!

完整實(shí)例代碼點(diǎn)擊此處本站下載。

附:Android基于方向傳感器實(shí)現(xiàn)指南針功能

step1:新建一個(gè)項(xiàng)目Compass,并將一張指南針圖片導(dǎo)入到res/drawable-hdpi目錄中

step2:設(shè)計(jì)應(yīng)用的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);//屏幕高亮
    //獲取系統(tǒng)服務(wù)(SENSOR_SERVICE)返回一個(gè)SensorManager 對(duì)象
    manager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
  }
  @Override
  protected void onResume() {
    /**
     * 獲取方向傳感器
     * 通過(guò)SensorManager對(duì)象獲取相應(yīng)的Sensor類(lèi)型的對(duì)象
     */
    Sensor sensor = manager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
    //應(yīng)用在前臺(tái)時(shí)候注冊(cè)監(jiān)聽(tīng)器
    manager.registerListener(listener, sensor,
        SensorManager.SENSOR_DELAY_GAME);
    super.onResume();
  }
  @Override
  protected void onPause() {
    //應(yīng)用不在前臺(tái)時(shí)候銷(xiāo)毀掉監(jiān)聽(tīng)器
    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];// 存放了方向值
      /**動(dòng)畫(huà)效果*/
      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>

更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Android開(kāi)發(fā)入門(mén)與進(jìn)階教程》、《Android視圖View技巧總結(jié)》、《Android編程之a(chǎn)ctivity操作技巧總結(jié)》、《Android操作SQLite數(shù)據(jù)庫(kù)技巧總結(jié)》、《Android操作json格式數(shù)據(jù)技巧總結(jié)》、《Android資源操作技巧匯總》及《Android控件用法總結(jié)

希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Android實(shí)現(xiàn)好看的微信聊天氣泡效果

    Android實(shí)現(xiàn)好看的微信聊天氣泡效果

    在聊天類(lèi)應(yīng)用中,通常用氣泡作為聊天內(nèi)容的背景色,比如微信的聊天背景,別人發(fā)過(guò)來(lái)的是白色的氣泡,自己發(fā)的是綠色的氣泡。本文將用Android實(shí)現(xiàn)好看的微信聊天氣泡效果,感興趣的可以了解一下
    2022-06-06
  • Android使用ExpandableListView實(shí)現(xiàn)三層嵌套折疊菜單

    Android使用ExpandableListView實(shí)現(xiàn)三層嵌套折疊菜單

    這篇文章主要介紹了Android使用ExpandableListView實(shí)現(xiàn)三層嵌套折疊菜單,對(duì)布局感興趣的同學(xué)可以參考下
    2021-04-04
  • Android編程自定義title bar(標(biāo)題欄)示例

    Android編程自定義title bar(標(biāo)題欄)示例

    這篇文章主要介紹了Android編程自定義title bar(標(biāo)題欄)的方法,結(jié)合實(shí)例形式分析了Android針對(duì)標(biāo)題欄的設(shè)置與頁(yè)面布局操作相關(guān)技巧,需要的朋友可以參考下
    2016-10-10
  • Android優(yōu)質(zhì)索尼滾動(dòng)相冊(cè)

    Android優(yōu)質(zhì)索尼滾動(dòng)相冊(cè)

    這篇文章主要介紹了Android優(yōu)質(zhì)索尼滾動(dòng)相冊(cè),桌面小部件滾動(dòng)相冊(cè),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Android中activity跳轉(zhuǎn)按鈕事件的四種寫(xiě)法

    Android中activity跳轉(zhuǎn)按鈕事件的四種寫(xiě)法

    這篇文章主要介紹了Android中activity跳轉(zhuǎn)按鈕事件的四種寫(xiě)法,下文中包括四個(gè)activity的內(nèi)容詳解,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-10-10
  • ffmpeg實(shí)現(xiàn)去水印以及切分視頻demo

    ffmpeg實(shí)現(xiàn)去水印以及切分視頻demo

    這篇文章主要為大家介紹了ffmpeg實(shí)現(xiàn)去水印以及切分視頻demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • 分享五種Android常用布局方式

    分享五種Android常用布局方式

    Android布局是應(yīng)用界面開(kāi)發(fā)的重要一環(huán),在Android中,共有五種布局方式,分別是:FrameLayout(框架布 局),LinearLayout (線(xiàn)性布局),AbsoluteLayout(絕對(duì)布局),RelativeLayout(相對(duì)布局),TableLayout(表格布局),小編通過(guò)本文逐一給大家詳解
    2015-11-11
  • android?原生安全音量配置邏輯設(shè)計(jì)詳解

    android?原生安全音量配置邏輯設(shè)計(jì)詳解

    這篇文章主要為大家介紹了android?原生安全音量配置邏輯設(shè)計(jì)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Android Studio finish()方法的使用與解決app點(diǎn)擊“返回”(直接退出)

    Android Studio finish()方法的使用與解決app點(diǎn)擊“返回”(直接退出)

    這篇文章主要介紹了Android Studio finish()方法的使用與解決app點(diǎn)擊“返回”(直接退出),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Android 物理游戲之重力系統(tǒng)開(kāi)發(fā)示例代碼

    Android 物理游戲之重力系統(tǒng)開(kāi)發(fā)示例代碼

    介紹Android 物理游戲之重力系統(tǒng),這里提供了詳細(xì)的資料整理,并附示例代碼和實(shí)現(xiàn)效果圖,有興趣的小伙伴可以參考下
    2016-08-08

最新評(píng)論