Android 简易指南针

来源:互联网 发布:淘宝卖家让我售后 编辑:程序博客网 时间:2024/05/24 06:28

通过Android的Sensor和动画效果,我们可以制作一个简单的指南针,不过测试和安装的手机必须要支持方向传感器。

布局xml如下:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:gravity="center"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".MainActivity">    <ImageView        android:id="@+id/ivCompass"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerHorizontal="true"        android:layout_centerVertical="true"        android:src="@drawable/image_g" /></RelativeLayout>


Activity代码:

 import android.hardware.Sensor;import android.hardware.SensorEvent;import android.hardware.SensorEventListener;import android.hardware.SensorManager;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.animation.Animation;import android.view.animation.RotateAnimation;import android.widget.ImageView;public class MainActivity extends AppCompatActivity implements SensorEventListener {    private SensorManager sensorManager;    private Sensor sensor;    private ImageView ivCompass;    private float currentDegree = 0f;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);        ivCompass = (ImageView) findViewById(R.id.ivCompass);    }    @Override    protected void onResume() {        super.onResume();        sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);        /*查看手机所有传感器类型        List<Sensor> sensorList = sensorManager.getSensorList(Sensor.TYPE_ALL);        for (Sensor s : sensorList){            System.out.println(s.getName());        }        */        sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL);    }    @Override    protected void onPause() {        super.onPause();        sensorManager.unregisterListener(this);    }    @Override    public void onSensorChanged(SensorEvent event) {        switch (event.sensor.getType()) {            case Sensor.TYPE_ORIENTATION:                float degree = event.values[0];                RotateAnimation ra = new RotateAnimation(currentDegree, -degree, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);                ra.setDuration(200);                ivCompass.startAnimation(ra);                //动画停在后来的位置                ra.setFillAfter(true);                currentDegree = -degree;                break;        }    }    @Override    public void onAccuracyChanged(Sensor sensor, int accuracy) {    }}


0 0