最新版的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首页小黄人眼睛加速感应转动的更多相关文章

  1. [置顶] 63行代码完美实现html5 贪吃蛇游戏

    以前也很少关注html5,感觉选择html已经慢慢成为趋势,想了解下.就找了个游戏学习了,写完这个游戏感觉html5和js结合很紧密,如果js不是特别好.估计需要先补习下js,这个只是个人的建议,不一 ...

  2. Html5游戏开发-145行代码完成一个RPG小Demo

    lufy前辈写过<[代码艺术]17行代码的贪吃蛇小游戏>一文,忽悠了不少求知的兄弟进去阅读,阅读量当然是相当的大.今天我不仿也搞一个这样的教程,目地不在于忽悠人,而在于帮助他人. 先看de ...

  3. 音频算法之小黄人变声 附完整C代码

    前面提及到<大话音频变声原理 附简单示例代码>与<声音变调算法PitchShift(模拟汤姆猫) 附完整C++算法实现代码> 都稍微讲过变声的原理和具体实现. 大家都知道,算法 ...

  4. [置顶] Linux协议栈代码阅读笔记(一)

    Linux协议栈代码阅读笔记(一) (基于linux-2.6.21.7) (一)用户态通过诸如下面的C库函数访问协议栈服务 int socket(int domain, int type, int p ...

  5. [置顶] Java开源代码研究总结

          由于工作中的需要,最近在研究SNMP协议和利用snmp4j和snmp4j.agent(   http://www.snmp4j.org/ ),实现snmp的南向和北向功能. 结合以前看过的 ...

  6. [置顶] Linux协议栈代码阅读笔记(二)网络接口的配置

    Linux协议栈代码阅读笔记(二)网络接口的配置 (基于linux-2.6.11) (一)用户态通过C库函数ioctl进行网络接口的配置 例如,知名的ifconfig程序,就是通过C库函数sys_io ...

  7. [置顶] openHAB 部分代码结构 UML 图

    openHAB 部分代码结构 UML 图 ModelRepository: ItemRegistry: ItemUIProvider: WebAppServlet:

  8. 某拍sig算法揭秘---50行代码下载5000万小姐姐自拍小视频

    背景: ​ ​ ​ 首先我们需要一点点python基础,比如可以运行类似下面的代码 import requests headers={ "xxx":"xxx", ...

  9. 分享:50行代码监听watch小程序的globalData

    监听方法: // 在任何组件.页面,例如页面 const app = getApp( ); Page({ onLoad: function( ) { app.watch$('role', ( val, ...

随机推荐

  1. 盘点一下立过的flag并立几个flag

    暑假前说了,要学opencv3,要看完冰火,要健身,要家教挣钱. 好样的,全都没落下. opencv3几乎是把80%的demo码了一遍. 冰火看完,还顺带学了一波知识,收获颇丰,搞到了马丁老爷子的几本 ...

  2. 十五、Hadoop学习笔记————Zookeeper客户端的使用

    timeout表示会话超时时间,zookeeper靠与客户的心跳来判断会话是否有效(单位毫秒), -r为只读,表示zookeeper如果与半数以上服务器失去连接则会停止服务,如果有-r参数,则会继续保 ...

  3. c# winform 窗体之间的传参

    说起winform程序中窗体之间的参数互传,大家找度娘会找到很多方法: 1.在窗体类中创建全局变量,类型为公开.静态的: 2.在窗体类中定义狗仔函数: 3.通过实践来船体参数: 这三种思路完全来自于霖 ...

  4. 作为函数的mixin

    作为函数的mixin 在一个 mixin 内部定义的变量或 mixin,都调用者可见,因此,它们可以作为它的返回值.如,以下Less代码: .count(@x, @y) {     @sum:(@x ...

  5. Mina自定义协议简单实现

    因公司需要做个电子秤自动称重系统,需要自定义协议实现,所以就用Mina简单实现了一下,有时间改成Netty版 服务端 package net.heartma.server;import java.io ...

  6. 爬虫day 04(通过登录去爬虫 解决django的csrf_token)

    #通过登录去爬虫 #首先要有用户名和密码 import urllib.request import http.cookiejar from lxml import etree head = { 'Co ...

  7. openstack pike 创建vxlan网络

    #openstack pike 创建vxlan网络 openstack pike 集群高可用  安装部署 汇总 http://www.cnblogs.com/elvi/p/7613861.html # ...

  8. 实现快餐配送页面jq

    <!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>快 ...

  9. 41.Linux应用调试-修改内核来打印用户态的oops

    1.在之前第36章里,我们学习了通过驱动的oops定位错误代码行 第36章的oops代码如下所示: Unable to handle kernel paging request at //无法处理内核 ...

  10. SpringCloud Feign使用详解

    添加依赖: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId> ...