zoukankan      html  css  js  c++  java
  • 简单的指南针开发

                 此例子的指南针在Activity的onResume方法执行时注册传感器的监听器 在onPause方法中执行解除绑定传感器监听器;

    目的是为了省电 传感器是很耗电的

    布局中就加了一张图片作为指南真的背景 此图片要居中 会转动

     1 import android.app.Activity;
     2 import android.content.Context;
     3 import android.graphics.Matrix;
     4 import android.hardware.Sensor;
     5 import android.hardware.SensorEvent;
     6 import android.hardware.SensorEventListener;
     7 import android.hardware.SensorManager;
     8 import android.os.Bundle;
     9 import android.view.animation.Animation;
    10 import android.view.animation.RotateAnimation;
    11 import android.widget.ImageView;
    12 
    13 public class MainActivity extends Activity {
    14     private ImageView imageView;
    15     private SensorManager manager;
    16     private SensorListener listener = new SensorListener();
    17     @Override
    18     public void onCreate(Bundle savedInstanceState) {
    19         super.onCreate(savedInstanceState);
    20         setContentView(R.layout.main);
    21         
    22         imageView = (ImageView) this.findViewById(R.id.imageView);
    23         imageView.setKeepScreenOn(true);
    24         manager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    25     }
    26 
    27 
    28     @Override
    29     protected void onResume() {
    30         
    31     
    32         Sensor sensor = manager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
    33         manager.registerListener(listener, sensor, SensorManager.SENSOR_DELAY_GAME);
    34         super.onResume();
    35     }
    36 
    37     @Override
    38     protected void onPause() {
    39         manager.unregisterListener(listener);
    40         super.onPause();
    41     }
    42     
    43 
    44     
    45     private final class SensorListener implements SensorEventListener{
    46         private float predegree = 0;
    47         public void onSensorChanged(SensorEvent event) {
    48             float degree = event.values[0];//存放了方向值 90
    49             RotateAnimation animation = new RotateAnimation(predegree, -degree, 
    50                     Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
    51 
    52             animation.setDuration(200);
    53             imageView.startAnimation(animation);
    54             predegree = -degree;
    55         }
    56 
    57         public void onAccuracyChanged(Sensor sensor, int accuracy) {
    58         }
    59     }
    60     
    61     
    62 }
    MainActivity

    RotateAnimation (float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)

    参数说明

    fromDegrees:旋转的开始角度。

    toDegrees:旋转的结束角度。

    pivotXType:X轴的伸缩模式,可以取值为ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。

    pivotXValue:X坐标的伸缩值。

    pivotYType:Y轴的伸缩模式,可以取值为ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。

    pivotYValue:Y坐标的伸缩值。

    pivotXValue
    pivotYValue
    为动画相对于物件的X、Y坐标的开始位 属性值说明:50%为物件的X或Y方向坐标上的中点位置,相对于自身。”50“代表绝对位置,“50%p”这代表相对于父控件来说。
  • 相关阅读:
    css切图Sprites
    javascript改变position值实现菜单滚动至顶部后固定
    Cannot create type class java.io.File from value
    关于如何拍摄瓷器(转)
    Struts2的jar问题
    vim的基本操作
    Flask基础
    Flask入门
    MongoDB 之 数据类型
    基于DBUtils实现数据库连接池
  • 原文地址:https://www.cnblogs.com/bimingcong/p/4926577.html
Copyright © 2011-2022 走看看