广

android开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    Android 利用方向传感器实现指南针具体步骤

    2018-04-08 09:04:05 次阅读 稿源:互联网
    广告
    step1:新建一个项目Compass,并将一张指南针图片导入到res/drawable-hdpi目录中
     
    step2:设计应用的UI界面,main.xml
    代码如下:

    <SPAN style="FONT-SIZE: 18px"><STRONG><?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></STRONG></SPAN>

    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);//屏幕高亮
    //获取系统服务(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) {
    }
    }
    }

    step4:AndroidManifest.xml
    代码如下:

    <SPAN style="FONT-SIZE: 18px"><STRONG><?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></STRONG></SPAN>

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告