編輯:關於android開發
安卓驅動陀螺儀代碼:
來源http://www.cnblogs.com/xiaobo-Linux/ qq463431476
package zcd.functions; import zcd.netanything.R; import android.app.Fragment; 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.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; public class VR extends Fragment implements SensorEventListener { private SensorManager sensorManager; private Sensor magneticSensor; private TextView showTextView; private Sensor accelerometerSensor; private Sensor gyroscopeSensor; // 將納秒轉化為秒 private static final float NS2S = 1.0f / 1000000000.0f; private float timestamp; private float angle[] = new float[3]; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub View view = inflater.inflate(R.layout.vr,container, false); showTextView = (TextView)view.findViewById(R.id.text); return view; } public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); sensorManager = (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE); magneticSensor = sensorManager .getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); accelerometerSensor = sensorManager .getDefaultSensor(Sensor.TYPE_ACCELEROMETER); gyroscopeSensor = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE); //注冊陀螺儀傳感器,並設定傳感器向應用中輸出的時間間隔類型是SensorManager.SENSOR_DELAY_GAME(20000微秒) //SensorManager.SENSOR_DELAY_FASTEST(0微秒):最快。最低延遲,一般不是特別敏感的處理不推薦使用,該模式可能在成手機電力大量消耗,由於傳遞的為原始數據,訴法不處理好會影響游戲邏輯和UI的性能 //SensorManager.SENSOR_DELAY_GAME(20000微秒):游戲。游戲延遲,一般絕大多數的實時性較高的游戲都是用該級別 //SensorManager.SENSOR_DELAY_NORMAL(200000微秒):普通。標准延時,對於一般的益智類或EASY級別的游戲可以使用,但過低的采樣率可能對一些賽車類游戲有跳幀現象 //SensorManager.SENSOR_DELAY_UI(60000微秒):用戶界面。一般對於屏幕方向自動旋轉使用,相對節省電能和邏輯處理,一般游戲開發中不使用 sensorManager.registerListener(this, gyroscopeSensor, SensorManager.SENSOR_DELAY_GAME); sensorManager.registerListener(this, magneticSensor, SensorManager.SENSOR_DELAY_GAME); sensorManager.registerListener(this, accelerometerSensor, SensorManager.SENSOR_DELAY_GAME); } //坐標軸都是手機從左側到右側的水平方向為x軸正向,從手機下部到上部為y軸正向,垂直於手機屏幕向上為z軸正向 @Override public void onSensorChanged(SensorEvent event) { if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { // x,y,z分別存儲坐標軸x,y,z上的加速度 float x = event.values[0]; float y = event.values[1]; float z = event.values[2]; // 根據三個方向上的加速度值得到總的加速度值a float a = (float) Math.sqrt(x * x + y * y + z * z); System.out.println("a---------->" + a); // 傳感器從外界采集數據的時間間隔為10000微秒 System.out.println("magneticSensor.getMinDelay()-------->" + magneticSensor.getMinDelay()); // 加速度傳感器的最大量程 System.out.println("event.sensor.getMaximumRange()-------->" + event.sensor.getMaximumRange()); showTextView.setText("x-->" + x + "\ny-->" +y + "\nz-->" + z); } else if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) { // 三個坐標軸方向上的電磁強度,單位是微特拉斯(micro-Tesla),用uT表示,也可以是高斯(Gauss),1Tesla=10000Gauss float x = event.values[0]; float y = event.values[1]; float z = event.values[2]; // 手機的磁場感應器從外部采集數據的時間間隔是10000微秒 System.out.println("magneticSensor.getMinDelay()-------->" + magneticSensor.getMinDelay()); // 磁場感應器的最大量程 System.out.println("event.sensor.getMaximumRange()----------->" + event.sensor.getMaximumRange()); System.out.println("x------------->" + x); System.out.println("y------------->" + y); System.out.println("z------------->" + z); // // Log.d("TAG","x------------->" + x); // Log.d("TAG", "y------------>" + y); // Log.d("TAG", "z----------->" + z); // // showTextView.setText("x---------->" + x + "\ny-------------->" + // y + "\nz----------->" + z); } else if (event.sensor.getType() == Sensor.TYPE_GYROSCOPE) { //從 x、y、z 軸的正向位置觀看處於原始方位的設備,如果設備逆時針旋轉,將會收到正值;否則,為負值 if(timestamp != 0){ // 得到兩次檢測到手機旋轉的時間差(納秒),並將其轉化為秒 final float dT = (event.timestamp - timestamp) * NS2S; // 將手機在各個軸上的旋轉角度相加,即可得到當前位置相對於初始位置的旋轉弧度 angle[0] += event.values[0] * dT; angle[1] += event.values[1] * dT; angle[2] += event.values[2] * dT; // 將弧度轉化為角度 float anglex = (float) Math.toDegrees(angle[0]); float angley = (float) Math.toDegrees(angle[1]); float anglez = (float) Math.toDegrees(angle[2]); System.out.println("anglex------------>" + anglex); System.out.println("angley------------>" + angley); System.out.println("anglez------------>" + anglez); System.out.println("gyroscopeSensor.getMinDelay()----------->" + gyroscopeSensor.getMinDelay()); } //將當前時間賦值給timestamp timestamp = event.timestamp; } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { // TODO Auto-generated method stub } @Override public void onPause() { // TODO Auto-generated method stub super.onPause(); sensorManager.unregisterListener(this); } }
插入排序和希爾排序插入排序:插入排序由n-1趟排序組成。第 i 趟排序前,保證從位置 0 到位置i-1 上的元素已經是排序狀態(這是插入排序正確的原因,也是前提條件)。所
Android消息處理機制(Handler、Looper、MessageQueue與Message) Android是消息驅動的,實現消息驅動有幾個要素: 消息的表示
自定義控件之創建可以復用的組合控件(三) 前面已學習了兩種自定義控件的實現,分別是自定義控件之對現有控件拓展(一)和 自定義控件之直接繼承View創建全新視圖(二),
easy touch利用playmaker拖動ngui對象 最近在學習unity3d的幾個插件。easy touch,playmaker,ngui。為了使幾個能夠一起