磁场传感器

  <com.lindingdu.app15.PointerView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.util.AttributeSet;
import android.view.View;

public class PointerView extends View implements SensorEventListener {
    private SensorManager sensorManager;//传感器管理器
    private Bitmap pointer=null;//定义指针的位图对象
    private float[] allvalue;//磁场传感器的值

    public PointerView(Context context, AttributeSet attrs) {
        super(context, attrs);
        //获取传感器管理器
        sensorManager= (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
        //为传感器注册监听器
        sensorManager.registerListener(this
                ,sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD)
                ,sensorManager.SENSOR_DELAY_GAME);

        pointer= BitmapFactory.decodeResource(super.getResources(),R.drawable.pointer);//指定要绘制的指针位图

    }

    @Override
    public void onSensorChanged(SensorEvent event) {//传感器值改变时触发

        if(event.sensor.getType()==Sensor.TYPE_MAGNETIC_FIELD){
            float[] value=event.values;//获取磁场感应器的值
            allvalue=value;
            super.postInvalidate();
        }

    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {//传感器精度改变时触发

    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //根据xy轴磁场强度绘制指针
        if(allvalue!=null){
            float x=allvalue[0];
            float y=allvalue[1];
            canvas.save();
            canvas.restore();//重置绘图对象
            canvas.translate(super.getWidth()/2,super.getHeight()/2);//设置旋转的中心点为屏幕的中心点
            if(y==0&x>0){//正东方
                canvas.rotate(90);//旋转90度
            }else if(y==0&x<0){//正西方
                canvas.rotate(270);
            }else{
             if(y>=0){
                canvas.rotate((float) Math.tanh(x/y)*90);
             }else {
                 canvas.rotate(180+(float) Math.tanh(x/y)*90);
                 }
            }
        }
        canvas.drawBitmap(this.pointer,-this.pointer.getWidth()/2,-this.pointer.getHeight()/2
                ,new Paint());//绘制指针

    }
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 微信作为社交平台,已占据了我们生活的绝大数,早些年微信还没出现时,我们与朋友的联系依靠电话、节假日问候依赖短信、彩...
    公子評阅读 2,682评论 0 2
  • 盛夏的晚上,我漫无目的的走着,耳边是蝉鸣声和远处细碎的声音。我听不清楚是什么,想沿着声音传来的方向看一看,才发现此...
    梦境记录者33阅读 2,622评论 0 0
  • "莉迪亚死了,可他们还不知道" 父母的爱像湖水一样,包围着她,也也掩埋了她。
    赤果色阅读 845评论 0 0
  • 你是否有过这样的经历: 读了很多书,但在需要的时候,一个概念都想不起来... 看了两个小时演讲视频,但听完后,能给...
    Amway陈浩阅读 3,440评论 0 1