概述
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
最后
以上就是忧心蜜粉为你收集整理的GSViewGSView的全部内容,希望文章能够帮你解决GSViewGSView所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复