自制手机指南针



    有时候在旅游时候不知道方向了~在小伙伴们面前掏出手机,秀一下我们自制的指南针可是很溜很溜的哟~~~虽然这不是很复杂难懂的原理和技术。下面直接进入代码咯(Just show you my code...) 

主函数页面的代码: 

Java代码   收藏代码
  1. import android.app.Activity;    
  2. import android.hardware.Sensor;    
  3. import android.hardware.SensorEvent;    
  4. import android.hardware.SensorEventListener;    
  5. import android.hardware.SensorManager;    
  6. import android.os.Bundle;    
  7. import android.view.animation.Animation;    
  8. import android.view.animation.RotateAnimation;    
  9. import android.widget.ImageView;    
  10.      
  11. public class CompassTestActivity extends Activity implements   
  12.         SensorEventListener {    
  13.     // 定义显示指南针图片的组件     
  14.     private ImageView image;    
  15.     // 记录指南针图片转过的角度     
  16.     private float currentDegree = 0f;    
  17.     // 定义真机的Sensor管理器     
  18.     private SensorManager mSensorManager;    
  19.      
  20.     @Override   
  21.     protected void onCreate(Bundle savedInstanceState) {    
  22.         super.onCreate(savedInstanceState);    
  23.         setContentView(R.layout.main);    
  24.         image = (ImageView) findViewById(R.id.main_iv);    
  25.         // 获取真机的传感器管理服务     
  26.         mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);    
  27.     }    
  28.      
  29.     @Override   
  30.     protected void onResume() {    
  31.         super.onResume();    
  32.         // 为系统的方向传感器注册监听器     
  33.         mSensorManager.registerListener(this,    
  34.                 mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),    
  35.                 SensorManager.SENSOR_DELAY_GAME);    
  36.     }    
  37.      
  38.     @Override   
  39.     protected void onPause() {    
  40.         super.onPause();    
  41.         // 取消注册     
  42.         mSensorManager.unregisterListener(this);    
  43.     }    
  44.      
  45.     @Override   
  46.     public void onAccuracyChanged(Sensor sensor, int accuracy) {    
  47.      
  48.     }    
  49.      
  50.     @Override   
  51.     public void onSensorChanged(SensorEvent event) {    
  52.         // 如果真机上触发event的传感器类型为水平传感器类型     
  53.         if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) {    
  54.             // 获取绕Z轴转过的角度     
  55.             float degree = event.values[0];    
  56.             // 创建旋转动画(反向转过degree度)     
  57.             RotateAnimation ra = new RotateAnimation(currentDegree, -degree,    
  58.                     Animation.RELATIVE_TO_SELF, 0.5f,    
  59.                     Animation.RELATIVE_TO_SELF, 0.5f);    
  60.             // 设置动画的持续时间     
  61.             ra.setDuration(200);    
  62.             // 设置动画结束后的保留状态     
  63.             ra.setFillAfter(true);    
  64.             // 启动动画     
  65.             image.startAnimation(ra);    
  66.             currentDegree = -degree;    
  67.         }    
  68.     }    
  69. }    

 伦理片 http://www.dotdy.com/
下边是页面的布局: 

Java代码   收藏代码
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   
  2.     android:layout_width="match_parent"   
  3.     android:layout_height="match_parent"   
  4.     android:gravity="center" >    
  5.      
  6.     <ImageView   
  7.         android:id="@+id/main_iv"   
  8.         android:layout_width="wrap_content"   
  9.         android:layout_height="wrap_content"   
  10.         android:src="@drawable/znz" />    
  11.      
  12. </LinearLayout>    



这是图片: 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值