如何在android中使用传感器管理器方位值旋转图像?

如何在android中使用传感器管理器方位值旋转图像?,android,view,azimuth,sensormanager,Android,View,Azimuth,Sensormanager,这里我使用传感器管理器获取方位角值。我想知道如何使用方位角值旋转图像视图,如指南针?谁能给出一些想法?如何使用OnDraw函数? 无需在OnDraw方法中绘制圆或线?以下是如何旋转图像视图: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //accel sensorManager = (SensorManage

这里我使用传感器管理器获取方位角值。我想知道如何使用方位角值旋转图像视图,如指南针?谁能给出一些想法?如何使用OnDraw函数?
无需在OnDraw方法中绘制圆或线?

以下是如何旋转图像视图:

 public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

        //accel
        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);



        setContentView(R.layout.sample);
    }

    ///////////////// Basics
    /**
     * Called when the application is in the background
     */
    public void onPause()
    {
        super.onPause();
        sensorManager.unregisterListener(this);

        //this is important because Android applications
        //do not close, they are in the background
        //so resources would be hogged otherwise
    }

    /**
     * Called when the application is started
     * or in the foreground again
     */
    public void onResume()
    {
        super.onResume();
        sensorManager.registerListener(this, sensor, rate);

    }

    //==================Accel=====================
    /**
     * Called when the values of the acceleration sensor changes
     * 
     * @param e Details about the change
     */
        public void onSensorChanged(SensorEvent e) 
        {
            float azimuth=e.values[0];

                    Log.i("azimuth",String.valueOf(azimuth));


        }

        /**
         * Called when accuracy of the sensor is changed
         * 
         * @param sen Which sensor's accuracy changed
         * @param acc The new accuracy degree
         */
        public void onAccuracyChanged(Sensor sen, int acc) 
        {
        }
对于API 11+,有一个简单的方法:

Matrix matrix=new Matrix();
imageview.setScaleType(ScaleType.MATRIX);   //required
matrix.postRotate((float) -azimuth, imageview.getDrawable().getBounds().width()/2, 
imageview.getDrawable().getBounds().height()/2);            

imageview.setImageMatrix(matrix);
你可以查看这个圆和线罗盘

希望这有帮助

arrow.setRotation((float) -azimuth);