1.传感器常用方法及常量


android中支持的传感器


2.移动小球(方位传感器)

1、创建一个自定义的View类,Ballview

public class BallView extends View implements SensorEventListener {private Bitmap ball=null;private float [] allvalue;private Point point =new Point();private int xSpeed,ySpeed;public BallView(Context context, @Nullable AttributeSet attrs) {super(context, attrs);super.setBackgroundColor(Color.WHITE);//设置背景色ball= BitmapFactory.decodeResource(getResources(),R.drawable.ball);SensorManager manager= (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);//找到传感器,但未定义类型manager.registerListener(this,manager.getDefaultSensor(Sensor.TYPE_ORIENTATION),SensorManager.SENSOR_DELAY_GAME);//创建一个适合游戏的方位传感器}@Overridepublic void onSensorChanged(SensorEvent event) {//传感器方位改变if (event.sensor.getType()==Sensor.TYPE_ORIENTATION){//现在是方位传感器float value[]=event.values;//取得所有的偏离数据allvalue=value;//取得三个轴的值super.postInvalidate();//主线程的显示需要重绘}}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);Paint paint=new Paint();//根据传感器的值来改变球的速度if (allvalue!=null){//已经取得了数据xSpeed=(int)allvalue[2];//计算X轴的速度ySpeed=(int)-allvalue[1];}point.x+=xSpeed;point.y+=ySpeed;if (point.x<0){point.x=0;}if (point.x>super.getWidth()-this.ball.getWidth()){//x轴已经显示过了point.x=super.getWidth()-ball.getWidth();}if (point.y>super.getHeight()-this.ball.getHeight()){//y轴已经显示过了point.y=super.getHeight()-ball.getHeight();//设置y轴的边界}canvas.drawBitmap(ball,point.x, point.y,paint);}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {}
}

2、布局文件
插入自定义的组件ballview

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><com.fengray.myex032sensor.BallViewandroid:layout_width="match_parent"android:layout_height="wrap_content"/></LinearLayout>

结果:
完美实现

3.使用磁场传感器做个指北针


1、创建一个自定义的View类,arrowview

public class ArrowlView extends View implements SensorEventListener {private Bitmap comp=null;private float [] allvalue;public ArrowlView(Context context, @Nullable AttributeSet attrs) {super(context, attrs);super.setBackgroundColor(Color.WHITE);//设置背景色comp= BitmapFactory.decodeResource(getResources(),R.drawable.arrows);SensorManager manager= (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);//找到传感器,但未定义类型manager.registerListener(this,manager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),SensorManager.SENSOR_DELAY_GAME);//创建一个适合游戏的磁场传感器}@Overridepublic void onSensorChanged(SensorEvent event) {//传感器方位改变if (event.sensor.getType()==Sensor.TYPE_MAGNETIC_FIELD){//现在是方位传感器float value[]=event.values;//取得所有的偏离数据allvalue=value;//取得三个轴的值super.postInvalidate();//主线程的显示需要重绘}}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);Paint paint=new Paint();//根据传感器的值来改变球的速度if (allvalue!=null){//已经取得了数据float x=allvalue[0];float y=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);}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(comp,-comp.getWidth()/2,-comp.getHeight()/2,paint);}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {}
}

2、布局中插入自定义view

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><com.fengray.myex032sensor.ArrowlViewandroid:layout_width="match_parent"android:layout_height="wrap_content"/></LinearLayout>

结果:
实现效果,但有闪退

魔乐科技安卓开发教程----李兴华----19 传感器相关推荐

  1. 魔乐科技安卓开发教程----李兴华----08APPWidget

    1.认识Widget 通过桌面的一些软件窗口实现对程序得控制,需要使用的类 RemotView 2.创建一个Widget 1.创建一个类,继承自AppWidgetProvider public cla ...

  2. 魔乐科技安卓开发教程----李兴华----01文件存储

    1.查看模拟器data文件夹 到-sdk\platform-tools文件夹下Shift+鼠标右键打开命令窗口(win7),输入adb root回车然后输入adb remount回车, 出现remou ...

  3. 魔乐科技安卓开发教程----李兴华----06PendingIntent

    1.intent和PendingIntent的区别 intent表示执行某种意图 pendingIntent表示暂缓执行某种意图,直到遇到特殊条件才执行 2.发送通知:Notification 参考文 ...

  4. 魔乐科技安卓开发教程----李兴华----13视频录制

    1.录制视频 1.添加各种权限及横屏属性 //传感器决定 参考: Activity的screenOrientation属性详解 <uses-permission android:name=&qu ...

  5. 魔乐科技安卓开发教程----李兴华----07BroadCast广播

    1.认识广播 1.建立广播接收器(类)MyBroadcastReceiver并继承BroadcastReceiver public class MyBroadcastReceiver extends ...

  6. 魔乐科技安卓开发教程----李兴华----05Service

    1.开启.终止服务 1.布局文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&quo ...

  7. 魔乐科技安卓开发教程----李兴华----10动画

    1.渐变动画TweenAnimation 2.创建透明度变化 1.主布局文件 <LinearLayout xmlns:android="http://schemas.android.c ...

  8. 魔乐科技安卓开发教程----李兴华----12音频录制

    1.MediaRecorder 2.MediaRecorder类的生命周期 2.一个录音的案例 点击下载本例代码 1.定义列表的布局 创建布局文件recode_files.xml <TableL ...

  9. 魔乐科技安卓开发教程----李兴华----03菜单

    1.ActivityGroup+GridView方式的基本菜单 1.创建用于显示icon的activity:MyActivity及其布局文件mylayout.xml mylayout <Line ...

最新文章

  1. Oracle 分组统计,抽取每组前十
  2. 基于订阅的服务通讯架构体系
  3. mysql 临时文件目录_MySQL数据库的临时文件究竟储存在哪里
  4. python 快速删除程序_如何快速一次性卸载所有python包(第三方库)呢
  5. 最新安卓手机性价比榜公布:Redmi连夺三冠
  6. css 实现居中的五种方式
  7. Windows Workflow Foundation实验01——Windows Workflow Foundation快速入门(练习四)
  8. Linux 命令(8)—— rz 命令与 sz 命令
  9. Linux脚本中带有小数点的数值比较大小
  10. 数据结构------递归+迷宫问题+最短路径问题解决思路
  11. 变频器供电高频电子变压器电源电压检测
  12. 如何学习一门新技术(经验分享)
  13. @inherited 注解详解
  14. yum 下载并切换到本地源(银河麒麟V10,中标麒麟V5)
  15. 云计算时代,NGINX将是你的“必杀技”
  16. Laravel 5.7用户注册邮箱激活的功能演示
  17. 安卓机用什么无线蓝牙耳机好?适合安卓机的蓝牙耳机推荐
  18. 达人评测 i7 12700H和R7 6800H选哪个好
  19. 基于SSM(Spring+SpringMVC+MyBatic)的停车场管理系统
  20. CarSim2020 安装和操作001

热门文章

  1. scp构造端口_scp怎么用非默认端口啊---
  2. arm linux的ASID (Address Space ID)
  3. 【观察】戴尔科技:“强平台+即服务”创新模式,重新定义混合多云之路
  4. 【C语言初阶】操作符之 位运算符详解(“ << ”,“ >> ”,“ ”,“ | ”,“ ^ ”,“ ~ ”)
  5. 尚硅谷-Linux学习
  6. 【路径规划-VRP问题】基于人工蜂群算法求解双层2E-VRP问题matlab代码
  7. Wayos网吧路由英雄联盟频繁掉线解决办法
  8. python微软雅黑字体_Matplotlib中文字体显示
  9. 机房动环监控系统参数与功能
  10. 中国十大特色购物网站