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

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

 更新時間:2020年04月20日 09:13:26   作者:歐陽鵬  
這篇文章主要為大家詳細(xì)介紹了Android利用Sensor(傳感器)實(shí)現(xiàn)指南針小功能的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

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

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

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

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

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

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

compass.png

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)返回一個SensorManager 對象 
 manager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
 } 
 
 @Override 
 protected void onResume() { 
 /** 
  * 獲取方向傳感器 
  * 通過SensorManager對象獲取相應(yīng)的Sensor類型的對象 
  */ 
 Sensor sensor = manager.getDefaultSensor(Sensor.TYPE_ORIENTATION); 
 //應(yīng)用在前臺時候注冊監(jiān)聽器 
 manager.registerListener(listener, sensor, 
  SensorManager.SENSOR_DELAY_GAME); 
 super.onResume(); 
 } 
 
 @Override 
 protected void onPause() { 
 //應(yīng)用不在前臺時候銷毀掉監(jiān)聽器 
 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> 

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

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論