程序运行闪图界面以及传感器

概要

主要讲一些程序开始时会有一个欢迎界面,不进行任何操作过一段时间之后会自己消失,还有就是简要介绍一些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_GRAVITY:
7.线性加速传感器Sensor.TYPE_LINEAR_ACCELERATION:
8.旋转向量传感器Sensor.TYPE_ROTATION_VECTOR:
9.方向传感器:Sensor.TYPE_ORIENTATION:#
        10.温度传感器Sensor.TYPE_TEMPERATURE:#
11.压力传感器,Sensor.TYPE_PRESSURE#
画#的是我们用过的,不过用法大同小异,大家可以试试,知道了这些物理事件可大有干头,我们以后也会用其他的传感器做些东西,敬请期待~

每日一句

真正的爱情不是一时好感,而是明明知道没结果,还想要坚持下去的冲动


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值