模仿ofo小黄人眼睛跟随手机移动
来源:互联网 发布:电气工程师设计软件 编辑:程序博客网 时间:2024/04/30 04:56
先上ofo效果图
模仿图
自己为小黄人增加了墨镜
实现原理很简单,就是根据传感器控制控件的移动。
上代码:
实例化传感器管理器对象,并实现传感器监听:
public class MainActivity extends AppCompatActivity implements SensorEventListener { SensorManager sensorManager;//传感器管理器对象 Sensor orientation,light;//方向传感器,光照传感器 ImageView iv_eyes;//眼睛 LinearLayout ll_glasses;//眼镜 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sensorManager = (SensorManager) getSystemService(this.SENSOR_SERVICE); orientation = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION); light=sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); iv_eyes= (ImageView) findViewById(R.id.iv_eyes); ll_glasses= (LinearLayout) findViewById(R.id.ll_glasses);
在传感器监听实现我们的业务:
//传感器监听 @Override public void onSensorChanged(SensorEvent sensorEvent) { //给光照传感器设置达到700换墨镜 if(sensorEvent.sensor.getType() == Sensor.TYPE_LIGHT){ // values值为225.0 0.0 0.0,第一个就是光照强度 float[] values = sensorEvent.values; if(values[0]>700){ ll_glasses.setVisibility(View.VISIBLE); }else{ ll_glasses.setVisibility(View.INVISIBLE); } } //给方向传感器设置转动眼睛 if (sensorEvent.sensor.getType() == Sensor.TYPE_ORIENTATION) { float[] values = sensorEvent.values;// values[0]:该值表示方位,也就是手机绕着Z轴旋转的角度。可以利用这个特性来实现电子罗盘// values[1]:当手机绕着X轴倾斜时该值发生变化。手机顶部抬起值会变小,底部反之。values[1]的取值范围是-180≤values[1]≤180。// values[2]:表示手机沿着Y轴的滚动角度。手机右侧抬起值变大,左侧反之。取值范围是-90≤values[2]≤90。// 超过阈值就不做处理,以防眼睛越出范围 if(values[1]>40||values[1]<-20||values[2]>35||values[2]<-30){ return; } change(values[2]-x,values[1]-y); x=values[2]; y=values[1]; }
眼睛转动动画:
//转动眼睛属性动画private void change(float x,float y){ //X方向移动 ObjectAnimator x_anim = ObjectAnimator.ofFloat(iv_eyes, "x", iv_eyes.getX(), iv_eyes.getX()-x); //Y方向移动 ObjectAnimator y_anim = ObjectAnimator.ofFloat(iv_eyes, "y", iv_eyes.getY(), iv_eyes.getY()-y); x_anim.setDuration(100); y_anim.setDuration(100); x_anim.start(); y_anim.start();}
在生命周期里对传感器进行注册和注销:
//转动眼睛属性动画private void change(float x,float y){ //X方向移动 ObjectAnimator x_anim = ObjectAnimator.ofFloat(iv_eyes, "x", iv_eyes.getX(), iv_eyes.getX()-x); //Y方向移动 ObjectAnimator y_anim = ObjectAnimator.ofFloat(iv_eyes, "y", iv_eyes.getY(), iv_eyes.getY()-y); x_anim.setDuration(100); y_anim.setDuration(100); x_anim.start(); y_anim.start();}
项目下载:
解压导入module,修改compileSdkVersion和buildToolVersion和你的AS一致就ok了
demo下载地址
阅读全文
1 0
- 模仿ofo小黄人眼睛跟随手机移动
- 仿ofo首页眼睛跟随加速器移动效果
- 仿ofo首页眼睛跟随加速器移动效果
- 基于HTML5陀螺仪实现ofo首页眼睛移动效果
- 跟随手机移动的View
- 几行代码实现ofo首页小黄人眼睛加速感应转动
- 几行代码实现ofo首页小黄人眼睛加速感应转动
- 仿265网址导航logo的两只眼睛跟随鼠标移动js实现方法
- Android小程序--跟随手机移动的小球
- 层跟随鼠标移动
- 人物跟随鼠标移动
- UITextField跟随键盘移动
- 镜头跟随GameObject移动。
- cocos::触摸跟随移动
- 跟随手指移动小球
- 跟随鼠标移动div
- 图片跟随鼠标移动
- button跟随手指移动
- HDU 3333 Turing Tree (离线线段树,经典)
- Python_matlab_01
- 第一次发表博客
- 冒泡事件
- 制作jffs2根文件系统
- 模仿ofo小黄人眼睛跟随手机移动
- 欢迎使用CSDN-markdown编辑器
- PAT (Advanced Level) Practise 1071 Speech Patterns (25)
- 判断b[]是否是a[]的子字符串,不区分大小写问题
- idhttp发送utf8格式
- 贪心 poj2393 Yogurt factory
- error while loading shared libraries: libevent-2.0.so.5 (安装MEMCACHED问题)
- 2017-7-10 用户,组和权限
- 关于CTDB