GSView

GSView

  用了一下午和一晚上写完了一个小DEMO,还顺便研究了一下如何用手机录GIF,手机不想root,花了点时间。
  这几天晚上玩手机的时候,突然有一个想法,app上的title和按钮在单手操作的时候,尤其是大屏手机,一直手按左上角返回的时候不方便,晚上躺着玩手机,尤其是侧卧的时候,很不愿意用另一只手,这几天晚上还有蚊子,只露出一直手玩手机就好了(-_-)。有什么解决办法呢,安卓不是内置了重力感应么,使用这个功能还不用权限,可以试试。
  重力感应的核心类是SensorManager,基本上没什么难度,实现SensorEventListener的接口,重写onSensorChanged()和onAccuracyChanged(),主要操作在onSensorChanged()里面,onSensorChanged()可以说是时刻都在变化,注意里面不要写一些耗时操作,不然会被调用很多次。

   @Override
    public void onSensorChanged(SensorEvent event) {

        if (event.sensor == null) {
            return;
        }

        if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
            int x = (int) event.values[0];
            int y = (int) event.values[1];
            int z = (int) event.values[2];
            }
     }
  通过代码片段,可以看到,整个重力感应的封装很简单,我们只要关心 event.values数组的前三个参数即可,当然了 event.values[]其实是float类型的,我们为了方便计算,转成Int即可,除非你需要很高的精度,手机的左右侧翻我们只需要关心X即可,当然这里是指竖屏状态下,横屏需要重新计算,当x>3&&x<-3的时候,手机其实已经明显翻转了,这时我们就可以进行相应的操作了,这里为了有更好看的效果,我使用了属性动画ValueAnimator,需要注意一点,在onSensorChanged中,会多次调用一个动画,导致出现了鬼畜的现象,因此需要设置一个控制变量,当动画执行后,才能再次调用。先看看效果:
  首先是向右侧翻手机

右翻

  首先是向左侧翻手机与之类似

这里写图片描述

  由于是在模拟器上录制的,重力感应会有问题,就先拿click事件代替重力事件了,真机上亲测没问题。
  一旦解决了动画多次调用的问题,就没什么难度了,向右移动的时候,title向右移动的距离是:(屏幕的宽度-title的宽度)/2,back按钮移动的距离是:屏幕的宽度-title的宽度-back的宽度,类似的向左移动的时候,back已经在最左边了,移动距离为0,title移动的距离是:(屏幕宽度-title的宽度)/2-back的宽度。当手机平放的时候,记得复位。还有一点注意的是ValueAnimator.ofFloat()方法里面可以不定个float的值,没有特殊需要,传入一个即可,一般的getAnimatedValue时,会判断mValues数组是否为空,如果不为空,就取第一个即可。项目待会传到网上,代码是很复杂。
  今天网速很好,代码详情:
  https://git.oschina.net/w5727/GSView.git
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值