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

首頁(yè) > 系統(tǒng) > Android > 正文

Android利用Sensor(傳感器)實(shí)現(xiàn)指南針小功能

2019-10-23 19:44:38
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

首先來(lái)說(shuō)一說(shuō)該指南針的實(shí)現(xiàn)思路:

程序先準(zhǔn)備一張指南針圖片,該圖片上方向指針指向北方。接下來(lái)開(kāi)發(fā)一個(gè)檢測(cè)方向的傳感器,程序檢測(cè)到手機(jī)頂部繞Z軸轉(zhuǎn)過(guò)多少度,讓指南針圖片反向轉(zhuǎn)多少度即可。由此可見(jiàn)指南針應(yīng)用只要在界面中添加一張圖片,并讓圖片總是反向轉(zhuǎn)過(guò)反向傳感器返回的第一個(gè)角度值即可。

下面介紹一下方向傳感器:方向傳感器用于感應(yīng)手機(jī)設(shè)備的擺放狀態(tài)。方向傳感器可以返回三個(gè)角度,這三個(gè)角度即可確定手機(jī)的擺放狀態(tài)。關(guān)于方向傳感器返回的三個(gè)角度的說(shuō)明如下。

第一個(gè)角度:表示手機(jī)頂部朝向正北方的夾角。當(dāng)手機(jī)繞著Z軸旋轉(zhuǎn)時(shí),該角度值發(fā)送改變。例如當(dāng)該角度為0時(shí),表明手機(jī)頂部朝向正北;該角度為90時(shí),代表手機(jī)頂部朝向正東;該角度為180時(shí),代表手機(jī)頂部朝向正南;該角度為270時(shí),代表手機(jī)頂部朝向正西。

第二個(gè)角度:表示手機(jī)頂部或尾部翹起的角度。當(dāng)手機(jī)繞著X軸傾斜時(shí),該角度值發(fā)送改變。該角度的取值范圍是-180~180。假設(shè)將手機(jī)屏幕朝上水平放在桌子上,如果桌子是完全水平的,該角度值應(yīng)該是0。加入從手機(jī)頂部開(kāi)始抬起,直到將手機(jī)沿X軸旋轉(zhuǎn)180度(屏幕向下水平放在桌面上),在這個(gè)旋轉(zhuǎn)過(guò)程中,該角度值會(huì)從0變化為-180。也就是說(shuō),從手機(jī)頂部抬起時(shí),該角度值會(huì)逐漸減小,直到等于-180;如果從手機(jī)底部開(kāi)始抬起,知道將手機(jī)沿X軸旋轉(zhuǎn)180度(屏幕向下水平放在桌面上),該角度值會(huì)從0變化為180。也就是說(shuō),從手機(jī)頂部抬起時(shí),該角度值會(huì)逐漸增大,直到等于180。

第三個(gè)角度:表示手機(jī)左側(cè)或右側(cè)翹起的角度。當(dāng)手機(jī)繞著Y軸傾斜時(shí),該角度值發(fā)送改變。該角度的取值范圍是-90~90。假設(shè)將手機(jī)屏幕朝上水平放在桌子上,如果桌子是完全水平的,該角度值應(yīng)該是0。假設(shè)將手機(jī)左側(cè)逐漸抬起,知道將手機(jī)沿Y軸旋轉(zhuǎn)90度(手機(jī)與桌面垂直),在這個(gè)旋轉(zhuǎn)過(guò)程中,該角度值會(huì)從0變化為-90。也就是說(shuō),從手機(jī)左側(cè)抬起時(shí),該角度值會(huì)逐漸減小,直到等于-90;如果將手機(jī)右側(cè)逐漸抬起,知道將手機(jī)沿Y軸旋轉(zhuǎn)90度(手機(jī)與桌面垂直),在這個(gè)旋轉(zhuǎn)過(guò)程中,該角度值會(huì)從0變化為90。也就是說(shuō),從手機(jī)右側(cè)抬起時(shí),該角度值會(huì)逐漸增大,直到等于90。

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

Android,Sensor,傳感器,指南針

compass.png

Android,Sensor,傳感器,指南針

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

package cn.roco.sensor;  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> 

step5:部署應(yīng)用到真機(jī)環(huán)境中  就可以查看運(yùn)行的效果啦!

我的Android進(jìn)階之旅------>Android利用Sensor(傳感器)實(shí)現(xiàn)水平儀功能的小例

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開(kāi)發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 莒南县| 临桂县| 三都| 晋江市| 鹤壁市| 峨山| 封丘县| 黎平县| 阆中市| 江山市| 定安县| 依安县| 绍兴县| 安福县| 西林县| 青神县| 通榆县| 南投县| 新郑市| 富锦市| 民丰县| 博白县| 科技| 鄄城县| 都匀市| 日喀则市| 宁陵县| 瑞昌市| 长子县| 濮阳市| 邻水| 桂阳县| 昆明市| 定边县| 彭山县| 扎鲁特旗| 岚皋县| 鄂托克前旗| 宁明县| 图片| 隆回县|