程序运行闪图界面以及传感器
2015-07-19 12:28
399 查看
概要
主要讲一些程序开始时会有一个欢迎界面,不进行任何操作过一段时间之后会自己消失,还有就是简要介绍一些android的传感器,它们很有用,比如可以***水平仪(和一些体感游戏)指南针,甚至有的手机支持温度和大气压强效果
有人会问了:你这个怎么什么都没有,是不是骗人的=w=,因为虚拟机不支持传感器所以什么都没有,发一张我的手机上的截图吧
这里主要说一下方向传感器,其他的很好就试出来了,比如光强你可以打开灯和关上灯来测试,方向传感器的话,我们知道手机是一个长方体,有三个方向互相垂直的面,分别沿这三个面旋转就会看到数值的变化,最后当指向北时三个值都会为零
知识点整理
1.其实所谓的闪屏就是一个计时器计时,规定几秒之后跳转2.传感器收手机自带的功能,我们使用接口就可以了
3.Activity的生命周期,这里会涉及到,如有不明白的同学可以看这篇博文,前人之述备矣,就不再赘述了 http://blog.csdn.net/liuhe688/article/details/6733407
DEMO
为了防止文章又臭又长就只发关键代码了~首先界面不用说,没有什么特别的地方,我们来看一下主界面的activity是如何实现计时跳转的
package com.example.administrator.lyfs; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Window; import java.util.Timer; import java.util.TimerTask; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); final Intent main = new Intent(this,MainChoice.class); Timer timer = new Timer(); TimerTask timertask = new TimerTask() { @Override public void run() { startActivity(main); MainActivity.this.finish(); } }; timer.schedule(timertask,1000*3); } }
就是使用timer来实现这个功能的,代码简单看上去又高端大气~
第二个界面只有一个按钮,跳转到第三个界面,因为第二个界面以后要做其他东西
第三个界面的java代码如下
package com.example.administrator.lyfs; import android.app.Activity; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.widget.TextView; /** * Created by Administrator on 2015/7/18. */ public class SensorTest extends Activity implements SensorEventListener{ private SensorManager mSensorManger; TextView firstOne; TextView firstTwo; TextView firstThree; TextView secondOne; TextView secondTwo; TextView secondThree; TextView ThirdOne; TextView ForthOne; TextView FifthOne; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activirty_sensor_test); firstOne = (TextView)findViewById(R.id.first_first); firstTwo = (TextView)findViewById(R.id.first_second); firstThree = (TextView)findViewById(R.id.first_third); secondOne = (TextView)findViewById(R.id.second_first); secondTwo = (TextView)findViewById(R.id.second_second); secondThree = (TextView)findViewById(R.id.second_third); ThirdOne = (TextView)findViewById(R.id.third_first); ForthOne = (TextView)findViewById(R.id.forth_first); FifthOne = (TextView)findViewById(R.id.fifth_first); mSensorManger = (SensorManager)getSystemService(SENSOR_SERVICE); } @Override protected void onResume() { super.onResume(); mSensorManger.registerListener(this, mSensorManger.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_GAME); mSensorManger.registerListener(this, mSensorManger.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD), SensorManager.SENSOR_DELAY_GAME); mSensorManger.registerListener(this, mSensorManger.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE), SensorManager.SENSOR_DELAY_GAME); mSensorManger.registerListener(this, mSensorManger.getDefaultSensor(Sensor.TYPE_LIGHT), SensorManager.SENSOR_DELAY_GAME); mSensorManger.registerListener(this, mSensorManger.getDefaultSensor(Sensor.TYPE_PRESSURE), SensorManager.SENSOR_DELAY_GAME); } @Override protected void onStop() { mSensorManger.unregisterListener(this); super.onStop(); } @Override protected void onPause() { mSensorManger.unregisterListener(this); super.onPause(); } @Override public void onAccuracyChanged(Sensor sensor,int accuracy) { } @Override public void onSensorChanged(SensorEvent event) { float[] values = event.values; int senseorType = event.sensor.getType(); switch (senseorType) { case Sensor.TYPE_ORIENTATION: firstOne.setText(""+values[0]); firstTwo.setText(""+values[1]); firstThree.setText(""+values[2]); break; case Sensor.TYPE_MAGNETIC_FIELD: secondOne.setText(""+values[0]); secondTwo.setText(""+values[1]); secondThree.setText(""+values[2]); break; case Sensor.TYPE_AMBIENT_TEMPERATURE: ThirdOne.setText(""+values[0]); break; case Sensor.TYPE_LIGHT: ForthOne.setText(""+values[0]); break; case Sensor.TYPE_PRESSURE: FifthOne.setText(""+values[0]); break; } } }
我们是通过activity实现SensorEventListener接口来实现的,这个接口需要重载两个方法
1.public void onAccuracyChanged(Sensor sensor,int accuracy) 当精度变化时调用这个函数
2.public void onSensorChanged(SensorEvent event)当传感器感应数值变化时调用
总的来说我们在Activity中做了这几件事
0.实现SensorEventListener接口
1.获得布局文件里的TextView用来显示数值
2.我们需要一个sensorManager来管理传感器
3.在onResume里注册传感器
4.在onPause和onStop里注销传感器(为了节省资源)
5.在onSensorChanged里面通过事件(event) 获得相关数据(value)然后通过传感器种类确定相应的显示数值
感想
这就是手机传感器的功能,一般的手机可能没有温度和压力传感器,一共有11个传感器1.加速度传感器 Sensor.TYPE_ACCELEROMETER:
2.磁场传感器 Sensor.TYPE_MAGNETIC_FIELD:#
3.陀螺仪感应器 Sensor.TYPE_GYROSCOPE:
4.光线传感器 Sensor.TYPE_LIGHT:#
5.距离感应器Sensor.TYPE_PROXIMITY:
6.重力传感器Sensor.TYPE_GR***ITY:
7.线性加速传感器Sensor.TYPE_LINEAR_ACCELERATION:
8.旋转向量传感器Sensor.TYPE_ROTATION_VECTOR:
9.方向传感器:Sensor.TYPE_ORIENTATION:#
10.温度传感器Sensor.TYPE_TEMPERATURE:#
11.压力传感器,Sensor.TYPE_PRESSURE#
画#的是我们用过的,不过用法大同小异,大家可以试试,知道了这些物理事件可大有干头,我们以后也会用其他的传感器做些东西,敬请期待~
每日一句
真正的爱情不是一时好感,而是明明知道没结果,还想要坚持下去的冲动相关文章推荐
- SQL Server 把当前日期中月份和几号中的0 去掉
- 德国精品软件 小红伞杀毒软件 AntiVir
- 德国精品软件 小红伞杀毒软件 AntiVir
- 什么是设计模式?为什么要使用设计模式?有什么好处?
- iOS如何在一个图标上加上气泡,显示数字
- Android初学之路(二)
- eclipse安装svn插件图文
- Linux键盘快捷键
- 新手浅谈C#关于abstract和interface
- Newstate: 对新闻点击流数据的可视分析
- 实习半年遇到的一些写代码的人类
- 相同的雪花
- 从内核文件系统看文件读写过程
- Microsoft Dynamics CRM 2013 server 升级 sp1 KB2963850
- Microsoft Dynamics CRM 2013 server 升级 sp1 KB2963850
- iOS 国际化简单记录
- 1049. Counting Ones (30)
- 股票学习17
- Bitmap类getPixels()方法中参数stride理解
- eclipse使用link方式安装android ADT插件