編輯:Android開發教程
步驟1:新建一個項目Compass,並將一張指南針圖片導入到res/drawable-hdpi目錄中
步驟2:設計應用的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>
步驟3: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) { } } }
步驟4: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>
今天心血來潮,又把ADT升級了一下,升級到了ADT 22,悲催的發現項目用不了了(能編譯通過,運行出錯)。錯誤一:(警告)Unable to resolve superc
菜單可以用來顯示額外的選項,這些選項也不必出現在主界面中。在Android框架中,主要有2種菜單:選項菜單 —— 顯示與當前活動有關的信息。使用M
Android和iOS誰更強?看到這個問題兩大陣營的用戶們估計又要吵翻天了。但誰都不能否認的是,這兩款操作系統都具備著超強的實力,才能夠取得如今的成績。在最近,Andro
使用AbsoluteLayout,可以指定它其中的子View的確切位置。觀察如下main.xml中的代碼:<?xml version="1.0"