锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

磁场传感器——指北针

时间:2023-10-14 11:37:02 21磁场传感器

package org.lxh.demo;  import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; 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 ArrowView extends View implements SensorEventListener {     private Bitmap comp = null;     private float[] allValue;      public ArrowView(Context context, AttributeSet attrs) {         super(context, attrs);         // 底色为白色         super.setBackgroundColor(Color.WHITE);          this.comp = BitmapFactory.decodeResource(super.getResources(),                 R.drawable.arrow);         // 现在我只找到了一个传感器,但没有定义类型         SensorManager manager = (SensorManager) context                 .getSystemService(Context.SENSOR_SERVICE);          manager.registerListener(this,                 // 创建了适合游戏操作的磁场传感器                 manager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),                 SensorManager.SENSOR_DELAY_GAME);      }     @Override     public void onAccuracyChanged(Sensor sensor, int accuracy) {     }     @Override  // 改变传感器的方向     public void onSensorChanged(SensorEvent event) {          // 现在是方向传感器         if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {              float value[] = event.values; // 获取所有偏差数据             ArrowView.this.allValue = value; // 获得三个轴的值             super.postInvalidate(); // 主线程的现实需要重绘         }     }     @Override     protected void onDraw(Canvas canvas) {         super.onDraw(canvas);         Paint p = new Paint(); 
       
        //
         根据传感器的数值来改变球的速度
        
        if (
        this.allValue != 
        null) { 
        //
         已经取得了数据
            
        float x = 
        this.allValue[0
        ] ; 
        float y = 
        this.allValue[1
        ] ; canvas.restore(); 
        //
         重置绘图对象 
        //
         设置以屏幕中心点作为旋转中心
            canvas.translate(
        super.getWidth() / 2, 
        super.getHeight() / 2
        ) ; 
        //
         判断y轴是否为0的旋转角度
            
        if (y == 0 && x > 0
        ) { canvas.rotate(90) ;    
        //
         旋转角度为90度
            } 
        else 
        if (y == 0 && x < 0
        ) { canvas.rotate(270) ;    
        //
         旋转角度为270度
            } 
        else {    
        //
         根据x和y的值计算旋转角度,而这个角度就是依靠tan()值来计算
                
        if(y >= 0
        ) { canvas.rotate((
        float) Math.tanh(x / y) * 90
        ); } 
        else
         { canvas.rotate(180 + (
        float) Math.tanh(x / y) * 90
        ); } } } canvas.drawBitmap(
        this.comp, -
        this.comp.getWidth() / 2
        , -
        this.comp.getHeight() / 2
        , p); } }
       
<org.lxh.demo.ArrowView 
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"  />

 

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章