[置顶] 几行代码实现ofo首页小黄人眼睛加速感应转动
最新版的ofo 小黄车的首页小黄人眼睛随重力而转动,感觉有点炫酷,学习一下吧,以下代码是在xamarin android下实现
ofo首页效果图:
xamarin android实现效果:
实现思路:
这个眼睛转动随加速度,使用的是FrameLayout图层叠加布局的,然后再进行dimen适配,随着加速度的变化,两个眼睛TranslationY方法进行View的移动。一下代码是在xamarin android下实现的,大概效果差不多,屏幕适配没弄。
素材图片:
github中自己复制吧:
先来看看MainActivity布局文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="match_parent">
<FrameLayout
android:layout_height="150dp"
android:layout_width="150dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true">
<ImageView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:src="@drawable/minions_btn_scan" />
<ImageView
android:layout_height="@dimen/dimen18"
android:layout_width="@dimen/dimen18"
android:src="@drawable/nes"
android:layout_marginTop="@dimen/dimen60"
android:layout_marginLeft="@dimen/dimen54"
android:layout_gravity="left"
android:id="@+id/lefteye" />
<ImageView
android:layout_height="@dimen/dimen18"
android:layout_width="@dimen/dimen18"
android:src="@drawable/nes"
android:layout_marginTop="@dimen/dimen60"
android:layout_marginRight="@dimen/dimen34"
android:layout_gravity="right"
android:id="@+id/righteye" />
<ImageView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:src="@drawable/minions_btn_scan_see" />
</FrameLayout>
</RelativeLayout>
效果实现主要代码:
using Android.App;
using Android.Widget;
using Android.OS;
using Android.Hardware;
using Android.Views;
using Android.Content;
using Android.Runtime;
using System;
namespace ofo_eye_demo
{
[Activity(Label = "ofo_eye_demo", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity,ISensorEventListener
{
private SensorManager sensorManager;
private Sensor defaultSensor;
private View lefteye, righteye;
private float normalSpace, x, y;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
lefteye = FindViewById(Resource.Id.lefteye);
righteye = FindViewById(Resource.Id.righteye);
normalSpace = Resources.GetDimension(Resource.Dimension.dimen20);
sensorManager = GetSystemService(Context.SensorService) as SensorManager;
defaultSensor = sensorManager.GetDefaultSensor(SensorType.Accelerometer);
/*
Accelerometer = 1,//加速度
MagneticField = 2,//磁力
Orientation = 3,//方向
Gyroscope = 4,//陀螺仪
Light = 5,//光线感应
Pressure = 6,//压力
Temperature = 7,//温度
Proximity = 8,//接近
Gravity = 9,//重力
LinearAcceleration = 10,//线性加速度
RotationVector = 11,//旋转矢量
RelativeHumidity = 12,//湿度
AmbientTemperature = 13,//温度
*/
}
protected override void OnResume()
{
base.OnResume();
sensorManager.RegisterListener(this,defaultSensor,SensorDelay.Ui);
}
protected override void OnPause()
{
base.OnPause();
sensorManager.UnregisterListener(this);
}
public void OnAccuracyChanged(Sensor sensor, [GeneratedEnum] SensorStatus accuracy)
{
//throw new NotImplementedException();
}
public void OnSensorChanged(SensorEvent e)
{
/*
加速度传感器说明:
加速度传感器又叫G-sensor,返回x、y、z三轴的加速度数值。
该数值包含地心引力的影响,单位是m/s^2。
将手机平放在桌面上,x轴默认为0,y轴默认0,z轴默认9.81。
将手机朝下放在桌面上,z轴为-9.81。
将手机向左倾斜,x轴为正值。
将手机向右倾斜,x轴为负值。
将手机向上倾斜,y轴为负值。
将手机向下倾斜,y轴为正值。
加速度传感器可能是最为成熟的一种mems产品,市场上的加速度传感器种类很多。
手机中常用的加速度传感器有BOSCH(博世)的BMA系列,AMK的897X系列,ST的LIS3X系列等。
这些传感器一般提供±2G至±16G的加速度测量范围,采用I2C或SPI接口和MCU相连,数据精度小于16bit。
*/
if (e.Sensor.Type == SensorType.Accelerometer)
{
x -= 6.0f * e.Values[0];
y += 6.0f * e.Values[1];
//越界处理
if (x < -normalSpace)
{
x = -normalSpace;
}
if (x > 0)
{
x = 0;
}
if (y > 0)
{
y = 0;
}
if (y < -normalSpace)
{
y = -normalSpace;
}
lefteye.TranslationY = y;
lefteye.TranslationX = x;
lefteye.Rotation = x;
righteye.TranslationX = x;
righteye.TranslationY = y;
righteye.Rotation = x;
}
}
}
}
参考文章:http://blog.csdn.net/qq_28268507/article/details/74528637
代码并没有很多,下载:https://github.com/MaChuZhang/ofo-eye-demo
作者:张林
标题:几行代码实现ofo首页小黄人眼睛加速感应转动
原文地址:http://blog.csdn.net/kebi007/article/details/75035710
转载随意注明出处
[置顶] 几行代码实现ofo首页小黄人眼睛加速感应转动的更多相关文章
- [置顶] 63行代码完美实现html5 贪吃蛇游戏
以前也很少关注html5,感觉选择html已经慢慢成为趋势,想了解下.就找了个游戏学习了,写完这个游戏感觉html5和js结合很紧密,如果js不是特别好.估计需要先补习下js,这个只是个人的建议,不一 ...
- Html5游戏开发-145行代码完成一个RPG小Demo
lufy前辈写过<[代码艺术]17行代码的贪吃蛇小游戏>一文,忽悠了不少求知的兄弟进去阅读,阅读量当然是相当的大.今天我不仿也搞一个这样的教程,目地不在于忽悠人,而在于帮助他人. 先看de ...
- 音频算法之小黄人变声 附完整C代码
前面提及到<大话音频变声原理 附简单示例代码>与<声音变调算法PitchShift(模拟汤姆猫) 附完整C++算法实现代码> 都稍微讲过变声的原理和具体实现. 大家都知道,算法 ...
- [置顶] Linux协议栈代码阅读笔记(一)
Linux协议栈代码阅读笔记(一) (基于linux-2.6.21.7) (一)用户态通过诸如下面的C库函数访问协议栈服务 int socket(int domain, int type, int p ...
- [置顶] Java开源代码研究总结
由于工作中的需要,最近在研究SNMP协议和利用snmp4j和snmp4j.agent( http://www.snmp4j.org/ ),实现snmp的南向和北向功能. 结合以前看过的 ...
- [置顶] Linux协议栈代码阅读笔记(二)网络接口的配置
Linux协议栈代码阅读笔记(二)网络接口的配置 (基于linux-2.6.11) (一)用户态通过C库函数ioctl进行网络接口的配置 例如,知名的ifconfig程序,就是通过C库函数sys_io ...
- [置顶]
openHAB 部分代码结构 UML 图
openHAB 部分代码结构 UML 图 ModelRepository: ItemRegistry: ItemUIProvider: WebAppServlet:
- 某拍sig算法揭秘---50行代码下载5000万小姐姐自拍小视频
背景: 首先我们需要一点点python基础,比如可以运行类似下面的代码 import requests headers={ "xxx":"xxx", ...
- 分享:50行代码监听watch小程序的globalData
监听方法: // 在任何组件.页面,例如页面 const app = getApp( ); Page({ onLoad: function( ) { app.watch$('role', ( val, ...
随机推荐
- 异常:This application has no explicit mapping for /error, so you are seeing this as a fallback.
出现这个异常说明了跳转页面的url无对应的值. 原因1: Application启动类的位置不对.要将Application类放在最外侧,即包含所有子包 原因:spring-boot会自动加载启动类所 ...
- mysql导入导出命令(Linux+Windows)
Linux环境: 壹.首先查看mysql的数据存放路径:ps -ef|grep mysql 贰.进入上述查出的mysql数据存放路径:cd var/lib/mysql (数据存放路径) 叁.导出 ...
- 我的第一个python web开发框架(17)——产品管理
这是后台管理系统最后一个功能,产品管理,它的接口与页面功能与上一章差不多. 获取产品列表接口 @get('/api/product/') def callback(): ""&qu ...
- linux网络、性能相关命令
netstat -tunpl #查看进程列表 top #查看系统资源统计 服务器速度测试 ping 123.57.92.9 -t 每一个被发送出的IP信息包都有一个TTL域,该域被设置为一个较高的数值 ...
- 用lua+redis实现一个简单的计数器功能 (一)
首先安装环境 依赖环境有 luajit http://luajit.org ngx_devel_kit https://github.com/simpl/ngx_devel_kit echo-ngin ...
- 浏览器输入URL加载的全过程都发生了什么事情,你知道?
什么是URL: 统一资源定位符(URL,英文 Uniform / Universal Reaource Locator 的缩写) 标准的URL由服务类型(协议).存放资源的主机域名(可以是域名或者ip ...
- strlen 与 sizeof
#include<stdio.h>#include<string.h>#include<string>#include<iostream>using n ...
- linux进程管理和系统状态查看命令简介
1 进程管理简介 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础 2 常用命令 2.1 pstree 2.1.1 功能描 ...
- Solr6.1.0Windows安装步骤
一. 环境 solr 6.1.0 下载地址 http://archive.apache.org/dist/lucene/solr/6.1.0/ jdk 1.8 tomcat8 二. 安装solr到t ...
- or1200处理器的异常处理类指令介绍
下面内容摘自<步步惊芯--软核处理器内部设计分析>一书 我们在计算机体系结构的学习中知道:中断实质上包含由外部事件引起的硬中断(又称外中断)和由内部预先安排的特定指令或内部异常引起的软中断 ...