魔乐科技安卓开发教程----李兴华----19 传感器
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 传感器相关推荐
- 魔乐科技安卓开发教程----李兴华----08APPWidget
1.认识Widget 通过桌面的一些软件窗口实现对程序得控制,需要使用的类 RemotView 2.创建一个Widget 1.创建一个类,继承自AppWidgetProvider public cla ...
- 魔乐科技安卓开发教程----李兴华----01文件存储
1.查看模拟器data文件夹 到-sdk\platform-tools文件夹下Shift+鼠标右键打开命令窗口(win7),输入adb root回车然后输入adb remount回车, 出现remou ...
- 魔乐科技安卓开发教程----李兴华----06PendingIntent
1.intent和PendingIntent的区别 intent表示执行某种意图 pendingIntent表示暂缓执行某种意图,直到遇到特殊条件才执行 2.发送通知:Notification 参考文 ...
- 魔乐科技安卓开发教程----李兴华----13视频录制
1.录制视频 1.添加各种权限及横屏属性 //传感器决定 参考: Activity的screenOrientation属性详解 <uses-permission android:name=&qu ...
- 魔乐科技安卓开发教程----李兴华----07BroadCast广播
1.认识广播 1.建立广播接收器(类)MyBroadcastReceiver并继承BroadcastReceiver public class MyBroadcastReceiver extends ...
- 魔乐科技安卓开发教程----李兴华----05Service
1.开启.终止服务 1.布局文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&quo ...
- 魔乐科技安卓开发教程----李兴华----10动画
1.渐变动画TweenAnimation 2.创建透明度变化 1.主布局文件 <LinearLayout xmlns:android="http://schemas.android.c ...
- 魔乐科技安卓开发教程----李兴华----12音频录制
1.MediaRecorder 2.MediaRecorder类的生命周期 2.一个录音的案例 点击下载本例代码 1.定义列表的布局 创建布局文件recode_files.xml <TableL ...
- 魔乐科技安卓开发教程----李兴华----03菜单
1.ActivityGroup+GridView方式的基本菜单 1.创建用于显示icon的activity:MyActivity及其布局文件mylayout.xml mylayout <Line ...
最新文章
- Oracle 分组统计,抽取每组前十
- 基于订阅的服务通讯架构体系
- mysql 临时文件目录_MySQL数据库的临时文件究竟储存在哪里
- python 快速删除程序_如何快速一次性卸载所有python包(第三方库)呢
- 最新安卓手机性价比榜公布:Redmi连夺三冠
- css 实现居中的五种方式
- Windows Workflow Foundation实验01——Windows Workflow Foundation快速入门(练习四)
- Linux 命令(8)—— rz 命令与 sz 命令
- Linux脚本中带有小数点的数值比较大小
- 数据结构------递归+迷宫问题+最短路径问题解决思路
- 变频器供电高频电子变压器电源电压检测
- 如何学习一门新技术(经验分享)
- @inherited 注解详解
- yum 下载并切换到本地源(银河麒麟V10,中标麒麟V5)
- 云计算时代,NGINX将是你的“必杀技”
- Laravel 5.7用户注册邮箱激活的功能演示
- 安卓机用什么无线蓝牙耳机好?适合安卓机的蓝牙耳机推荐
- 达人评测 i7 12700H和R7 6800H选哪个好
- 基于SSM(Spring+SpringMVC+MyBatic)的停车场管理系统
- CarSim2020 安装和操作001
热门文章
- scp构造端口_scp怎么用非默认端口啊---
- arm linux的ASID (Address Space ID)
- 【观察】戴尔科技:“强平台+即服务”创新模式,重新定义混合多云之路
- 【C语言初阶】操作符之 位运算符详解(“ << ”,“ >> ”,“ ”,“ | ”,“ ^ ”,“ ~ ”)
- 尚硅谷-Linux学习
- 【路径规划-VRP问题】基于人工蜂群算法求解双层2E-VRP问题matlab代码
- Wayos网吧路由英雄联盟频繁掉线解决办法
- python微软雅黑字体_Matplotlib中文字体显示
- 机房动环监控系统参数与功能
- 中国十大特色购物网站