先上ofo效果图

模仿图

自己为小黄人增加了墨镜

实现原理很简单,就是根据传感器控制控件的移动。

上代码:

实例化传感器管理器对象,并实现传感器监听:

public class MainActivity extends AppCompatActivity implements SensorEventListener {SensorManager sensorManager;//传感器管理器对象Sensor orientation,light;//方向传感器,光照传感器ImageView iv_eyes;//眼睛LinearLayout ll_glasses;//眼镜@Overrideprotected 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);

在传感器监听实现我们的业务:

//传感器监听@Overridepublic 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下载地址

模仿ofo小黄人眼睛跟随手机移动相关推荐

  1. 小黄人眼睛跟随鼠标移动

    小黄人眼睛跟随鼠标移动 教程地址:原文地址(YouTube) B站教程:原文转载(bilibili) 两个视频的内容相同,第二个为转载 效果图 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存 ...

  2. 仿新版ofo共享单车小黄人动态效果

    前言 最近升级小黄车到最新版本,发现ofo与小黄人合作,生产了一批小黄人版小黄车,甚是可爱-,并且App的界面也进行了相应的效果改变,用车按钮变成了小黄人的头像,小黄人的眼睛还可以跟随设备的倾斜进行转 ...

  3. 微信小程序相关三、css写小黄人

    小程序上课第三天,因为今天院里有活动,所以没去上课,第四天上午又因为要召开入党转正大会,又耽误了一上午,下午去上课,要了资料.这两天讲了一些零零碎碎的东西,做的实例有上面这个小黄人 都是用的css,基 ...

  4. 纯CSS3画出小黄人并实现动画效果

    前言 前两天我刚发布了一篇CSS3实现小黄人动画的博客,但是实现的CSS3动画是基于我在站酷网找到的一张小黄人的jpg格式图片,并自己用PS抠出需要实现动画的部分,最后才完成的动画效果.但是,其实我的 ...

  5. IOS绘制小黄人,对绘图知识的一个练习

    IOS绘制小黄人,对绘图知识的一个练习 #define kTopX rect.size.width * 0.5 #define kTopRadius 80 #define kTopY 260// // ...

  6. 绘制半圆_Android Canvas 绘制小黄人

    ❝ 学习往往是枯燥的,如果能用一个有趣 Demo 来学习和练习技术,那对知识的掌握就会更牢固.我在学习 Canvas 绘制 API 的时候就是这样做的. ❞ 截图镇楼 效果图 我觉得这个绘制小黄人的自 ...

  7. la环球乐园里的机器人_北京环球度假区发布小黄人乐园主题视频,抢鲜感受未来的欢乐体验...

    记者 | 底伊乐 编辑 | 汤威 继北京环球度假区发布了城市大道特色亮点后,7月30日,北京环球度假区又发布了小黄人乐园主题视频. 作为北京环球影城七大主题景区之一,小黄人乐园将于2021年北京环球度 ...

  8. Python小黄人绘制

    Python小黄人绘制 使用python turtle库绘制小黄人 ​ 附上各坐标点的坐标图 完整代码: import turtle as t # 初始化 t.setup(800,800) t.pen ...

  9. 黄蓝专场之 | ofo小黄车的执念与博弈

    文章来源:新浪科技 ID:techsina 内容经授权发布 20多天前,ofo小黄车CEO戴威现身北大光华论坛.在近15分钟的演讲中,这位身披红巾.意气风发的90后师兄,与在场近千名学子分享了&quo ...

最新文章

  1. Oracle后台进程
  2. 无法使用BIPublisher开发报表
  3. 项目管理概述学习记录(二)
  4. 计算机网络word文档,计算机网络word.doc
  5. Android使用C/C++来保存密钥
  6. NoSQL之【Redis】学习(二):配置说明
  7. 精选| 2021年9月R新包推荐(第58期)
  8. python3重写new方法_Python 3.8 新功能一览
  9. 【STM32】HAL库 STM32CubeMX教程十五---FMC-SDRAM(二)
  10. 我是学Java的,为什么要我装JDK
  11. 救人无数七个心理寓言
  12. Cannot connect to the database. –Error connecting to database.
  13. DSP课设项目(ICETEK-VC5509-EDU)
  14. 司空见惯 - 会议室名称
  15. wsimport简单实现WebService
  16. Python3不存在raw_input( )了
  17. JPA实体中数据库生成ID的最终指南1
  18. 这部史诗级大片,燃到爆!
  19. React / Vue 前后端分离项目实现微信分享教程
  20. 面试心得---按时交付代码的重要性

热门文章

  1. Antlr 4语法与空格
  2. 易优插件-易优CMS必备插件免费
  3. 单列集合系列之List集合的初了解
  4. python控制继电器开关_TPYBoardV102继电器使用教程
  5. win11系统点开图片几秒后就显示“此处没有任何要显示的内容
  6. github clone报错error: RPC failed; result=56, HTTP code = 200
  7. vue高德单条(可批量)路线规划+单条(可批量)路线带途径节点marker+单条(可批量)路线分段渲染各颜色
  8. ai怎么渐变颜色_Illustrator如何调渐变颜色 调渐变颜色方法分享
  9. 档案OCR识别SDK开发包
  10. G-sensor的完全校准