前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >传感器实现仿微信摇一摇功能

传感器实现仿微信摇一摇功能

作者头像
程序员小猿
发布2021-01-18 09:55:49
发布2021-01-18 09:55:49
1.5K00
代码可运行
举报
文章被收录于专栏:程序IT圈程序IT圈
运行总次数:0
代码可运行

程序猿——科技改变未来

导语

如今Android手机中,硬件中内嵌了很多传感器(比如加速度传感器,重力传感器,陀螺仪传感器,方向传感器,压力传感器,温度传感器等等),作为一名Android的程序猿,有必要去了解一下这些传感器,代码怎么使用以及如何运用到我们平时公司项目炫酷效果的开发。

1摇一摇效果图

效果如下:界面有点丑,勿吐槽哈~关键是后面我们如何去实现这功能。

2简单介绍传感器

如果你英文不错以及可以翻墙访问的话,建议您不妨直接去谷歌官网看文档:https://developer.android.com/reference/android/hardware/Sensor.html。

百度百科这样描述:传感器(英文名称:transducer/sensor)是一种检测装置,能感受到被测量的信息,并能将感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息的传输、处理、存储、显示、记录和控制等要求。

我们常常会把各种传感器比拟成一个人的五官(视觉 听觉 嗅觉 味觉 触觉)。

如今的手机中,硬件中内嵌了很多传感器(比如加速度传感器,重力传感器,陀螺仪传感器,方向传感器,压力传感器,温度传感器等等),作为一名程序猿,有必要去了解一下这些传感器,代码怎么使用以及如何运用到日常开发。

3如何使用传感器

因为本文是为了实现一个仿微信摇一摇的功能,而实现这个功能用到的是加速度传感器。所以我们就以加速度传感器来讲解具体的实现过程。其他的传感器的使用也是类似,写程序就必须要举一反三,学的才不会累。

一般使用传感器需要3个步骤:

1、首先得到SensorManager

代码语言:javascript
代码运行次数:0
运行
复制
SensorManager sensorManager= (SensorManager) getSystemService(SENSOR_SERVICE);

2、注册监听加速度传感器

代码语言:javascript
代码运行次数:0
运行
复制
 Sensor accSensor;//加速度传感器
accSensor=sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
SensorEventListener accListener;//加速度传感器监听器
sensorManager.registerListener(accListener,accSensor,SensorManager.SENSOR_DELAY_GAME);//注册

3、最后记得接触注册传感器

代码语言:javascript
代码运行次数:0
运行
复制
sensorManager.unregisterListener(accListener);//解除注册

4微信摇一摇核心代码

作为程序员,直接上微信摇一摇的核心代码,相信可以更直接了当的介绍传感器的具体用法,程序中重点的语句,我也已经注释在代码后面。

代码语言:javascript
代码运行次数:0
运行
复制
public class MainActivity extends AppCompatActivity {    
    @ViewInject(R.id.image1)    
    private ImageView image1;    
    @ViewInject(R.id.image2)    
    private  ImageView image2;
   SensorManager sensorManager;
   Sensor accSensor;//加速度传感器
   SensorEventListener accListener;//加速度传感器监听器
   long lastTime;    
    private int rawId;    
    private SoundPool soundPool;    //震动
   private Vibrator vibrator;    
    @Override
   protected void onCreate(Bundle savedInstanceState) {
       x.Ext.setDebug(true);
       x.Ext.init(getApplication());        
        super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);  
       x.view().inject(this);
       vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);//获取系统震动服务
       sensorManager= (SensorManager) getSystemService(SENSOR_SERVICE);
       initSoundPool();//初始化短小音乐
       initSensor();
   }    
        private void initSensor() {
           accSensor=sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
           accListener=new SensorEventListener() {            
                @Override
           public void onSensorChanged(SensorEvent event) {   //判断条件成功后,执行摇一摇的效果
               long curTime=System.currentTimeMillis();//获取当前时间
               if ((curTime-lastTime)<1000) {                   
                // Toast.makeText(MainActivity.this, "间隔时间过短", Toast.LENGTH_SHORT).show();
                   return;
               }                
                float[]values=event.values;                
                float x=values[0];                
                float y=values[1];                
                float z=values[2];
               Log.e("自定义标签", "类名:MainActivity" + "方法名:onSensorChanged: "+x+":"+y+":"+z);                
                if (x>10||y>10||z>10) {             //摇一摇成功
                   //1.播音乐2.执行动画
                   soundPool.play(rawId,2,1,1,0,1);//参数2 左声道 参数3 右声道 参数4 优先级 参数5 是否循环  参数6 速率0.5-2
                   playAnim();                    //摇动手机后,再伴随震动提示~~
                   vibrator.vibrate(500);
               }               lastTime=curTime;
           }            @Override
           public void onAccuracyChanged(Sensor sensor, int accuracy) {           }
       };        //注册
       sensorManager.registerListener(
             accListener,accSensor,SensorManager.SENSOR_DELAY_GAME);
   }    
        private void initSoundPool(){        //专门用于播放短小音乐
            soundPool=new SoundPool(10, AudioManager.STREAM_MUSIC,1);
            rawId=soundPool.load(getApplicationContext(),R.raw.kakaka,1);//将资源转化为可播放对象
   }    
       private void playAnim() {        //微信摇一摇动画
           AnimatorSet animatorSet=new AnimatorSet();        
            int width=image1.getWidth();        
            int height=image1.getHeight();        //属性动画,根据屏幕圆点的
           ObjectAnimator up_image1=ObjectAnimator.ofFloat(image1,"translationY",0,-height);//向上移动
           ObjectAnimator up_image2=ObjectAnimator.ofFloat(image1,"translationY",-height,0);//返回           ObjectAnimator down_image1=ObjectAnimator.ofFloat(image2,"translationY",0,height);//向下移动
           ObjectAnimator down_image2=ObjectAnimator.ofFloat(image2,"translationY",height,0);//返回           animatorSet.play(up_image1).with(down_image1);//先执行up1--down1
           animatorSet.play(up_image2).after(up_image1).with(down_image2);//后执行
           animatorSet.setDuration(1000);
           animatorSet.start();//执行动画3
   }    
       @Override
      protected void onDestroy() {        
       super.onDestroy();
      sensorManager.unregisterListener(accListener);//解除注册
   }
}

5总结

本文创作时间为3个小时,原创不易,如果哪里有错误或者写作意见,请帮忙指正和提醒,谢谢,大家共同进步!

本文的源码,如果谁有兴趣要的,直接微信加我私聊,。或者公众号直接私聊我都行。

本文属于原创,如有转载,请标注原作者,版权归本公众号所有。如果你喜欢我写的文章请关注 程序IT圈 。以后会经常更新最实用的软件编程技术。

最近建立了个微信群,群里有很多个公众号的作者,如果二维码过期,请直接加公众号后台回复"加群",我拉你入群。期待你们的加入:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-09-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员小猿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档