效果图:

所用的Ui就三张图:






案例代码:

结构

MainActivity.java

package com.example.myapp;

import android.content.Intent;
import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView; import java.util.List; public class MainActivity extends AppCompatActivity { private SensorManager sensorManager;
private TextView textView; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().hide();
setContentView(R.layout.activity_main);
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
List<Sensor> sensorList = sensorManager.getSensorList(Sensor.TYPE_ALL);
StringBuilder sb = new StringBuilder();
sb.append("您手机的传感器个数 :" + sensorList.size() + "\n");
sb.append("列表如下:\n");
for (Sensor sensor : sensorList) {
sb.append(sensor.getName() + "\n");
} textView = ((TextView) findViewById(R.id.tv));
textView.setText(sb); } public void click(View view) {
startActivity(new Intent(this, ShowActivity.class));
}
}

ShowActivity.java

package com.example.myapp;

import android.animation.ObjectAnimator;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.os.Vibrator;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView; import static android.hardware.SensorManager.SENSOR_DELAY_NORMAL; public class ShowActivity extends AppCompatActivity implements SensorEventListener { private SensorManager sensorManage;
private Sensor sensor; private float xFlaot;
private float yFlaot;
private float zFlaot;
private ImageView up;
private ImageView down;
private ObjectAnimator upAnmation;
private ObjectAnimator downAnamtion;
private AnimationSet setUp;
private TranslateAnimation up1;
private Vibrator vs; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show);
//获取传感器管理器
sensorManage = ((SensorManager) getSystemService(SENSOR_SERVICE));
//获取指定传感器
sensor = sensorManage.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
//获取震动对象
vs = ((Vibrator) getSystemService(VIBRATOR_SERVICE));
//Ui图片手上部分
up = (ImageView) findViewById(R.id.Myup);
//Ui图手下部分
down = (ImageView) findViewById(R.id.Mydwon);
//初始化动画
initAnimation();
} private void initAnimation() {
/* upAnmation = ObjectAnimator.ofFloat(up, "translationY", 0, -200, 0);
upAnmation.setDuration(4000);*/
downAnamtion = ObjectAnimator.ofFloat(down,"translationY",0,200,0);
downAnamtion.setDuration(4000);
up1 = new TranslateAnimation(0,0,0,-200);
up1.setDuration(2000);
final TranslateAnimation up2= new TranslateAnimation(0,0,-200,0);
up2.setDuration(2000); setUp = new AnimationSet(false);
setUp.addAnimation(up1); up1.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) { } @Override
public void onAnimationEnd(Animation animation) {
up.clearAnimation();
up.startAnimation(up2);
} @Override
public void onAnimationRepeat(Animation animation) { }
});
/*upAnmation.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) { } @Override
public void onAnimationEnd(Animator animation) { } @Override
public void onAnimationCancel(Animator animation) { } @Override
public void onAnimationRepeat(Animator animation) { }
});*/
} @Override
protected void onResume() {
super.onResume();
//注册监听
sensorManage.registerListener(this, sensor, SENSOR_DELAY_NORMAL); } @Override
public void onSensorChanged(SensorEvent event) {
float[] values = event.values;
xFlaot = values[0]; //X轴加速度 左右
yFlaot = values[1]; //Y轴加速度 前后
zFlaot = values[2]; //Z轴加速 重力
int val = 7; if (xFlaot>val||yFlaot>val||zFlaot>13){
up.startAnimation(up1);
//自定义一个震动模式 两个为一组 前一个参数为播放延迟时间 第二个播放时长
long [] patter =new long[]{100l,2000l,300l,4000l};
//第一个震动模式,第二个参数从振动模式选取下标中某个重复震动
//假设第二个参数是1 那么将从 2000l,300l 作为一组数组一直重复
// 如果第二个参数为震动模式的最后一位 那么将不震动(因为只有一个延迟播放时间,没有播放时间)
//需要权限<uses-permission android:name="android.permission.VIBRATE"/>
vs.vibrate(patter,3);
downAnamtion.start();
Log.e("fmy","启动"); }
} @Override
protected void onPause() {
super.onPause();
//解除注册
sensorManage.unregisterListener(this);
} @Override
public void onAccuracyChanged(Sensor sensor, int accuracy) { }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.myapp.MainActivity"> <LinearLayout
android:orientation="vertical"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="click"
android:text="查看实时重力指数" />
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
</LinearLayout> </ScrollView>

activity_show.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_show"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#1d1d1d"
android:orientation="vertical"
tools:context="com.example.myapp.ShowActivity"> <ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@mipmap/shakehideimg_man2" /> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:orientation="vertical"> <ImageView
android:id="@+id/Myup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
android:src="@mipmap/shake_logo_up" /> <ImageView
android:id="@+id/Mydwon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
android:src="@mipmap/shake_logo_down" />
</LinearLayout>
</RelativeLayout>

安卓高级5 传感器和震动 模仿微信摇一摇Ui效果的更多相关文章

  1. (转)ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果

    场景:移动支付需要对二维码的生成与部署有所了解,掌握目前主流的二维码生成技术. 1 ZXing 生成二维码 首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老 ...

  2. Android 模仿微信发送图片 钟罩效果

    参考资料http://trylovecatch.iteye.com/blog/1189452 http://bbs.51cto.com/thread-1031415-1.html### 1.添加资源文 ...

  3. 玩转Android之加速度传感器的使用,模仿微信摇一摇

    Android系统带的传感器有很多种,最常见的莫过于微信的摇一摇了,那么今天我们就来看看Anroid中传感器的使用,做一个类似于微信摇一摇的效果. OK ,废话不多说,我们就先来看看效果图吧: 当我摇 ...

  4. 自定义控件(模仿微信ToggleButton控件)

    弄过android开发的都知道,系统有一个默认的ToggleButton,但很多人都觉得他很难看,当然也包括我.如果你感觉他不难看,那你就继续使用系统的吧,这篇文章对你来说是多余的了. 今天来写一个模 ...

  5. 利用传感器(sensor)实现微信摇一摇动画

    所需要的权限: <uses-permission android:name="android.permission.VIBRATE"></uses-permiss ...

  6. Android Studio精彩案例(三)《模仿微信ViewPage+Fragment实现方式二》

    转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 写在前面的话:此专栏是博主在工作之余所写,每一篇文章尽可能写的思路清晰一些,属于博主的"精华"部分,不同于以往专栏 ...

  7. iOS-高仿微信摇一摇动画效果加震动音效

    概述 摇一摇动画效果 (加震动音效) 详细 代码下载:http://www.demodashi.com/demo/10707.html 众所周知, 微信中的摇一摇功能: 搜索人/歌曲/电视,同样在一些 ...

  8. css模仿微信弹出菜单

      css模仿微信弹出菜单 效果图: html: <div class="action-sheet-backdrop"> <div class="act ...

  9. js模仿微信语音播放的小功能

    自己写的一个模仿微信语音播放的小功能,实现的主要功能是:点击播放,点击暂停,播放切换,,,  代码如下: <!DOCTYPE html> <html lang="en&qu ...

随机推荐

  1. Array方面Js底层代码学习记录

    一..clear() →Array function clear() { this.length = 0; return this; } 返回清除item的空数组. 例子: var fruits = ...

  2. sqlserver数据库导入Mysql数据库问题

    近来遇到一个问题,之前的项目用的是SQLServer数据库,但是现在要换成MySQL数据库,所有整理了一些数据导入的步骤,供需要的人参考! 第一步: 第二步: 第三步: 第四步: 第五步: 第六步: ...

  3. postman学习笔记(一)——最简单的postman入门

    昨天开始正式接触postman的操作,最简单的操作是根据接口文档一个个测试接口. 例如: 测试环境地址:http://111.2.198.4(项目组自己的测试环境,要测试的项目组肯定会给你的) //以 ...

  4. OpenShift实战(六):OpenShift日志监控EFK

    1.镜像下载 为了防止安装过程中由于镜像下载缓慢导致自动部署失败,所以首先提前下载好EFK镜像. docker pull openshift/origin-logging-fluentd docker ...

  5. 迎圣诞,拿大奖活动赛题_SQLi(sprintf格式化字符)

    看题目应该就是注入没跑了 先拿正常输入试试,输了admin,admin,结果返回password error!,说明还真的存在admin账户 拿常规注入语句试探一下admin' and 1=1%23, ...

  6. [BJOI2006]狼抓兔子

    题目描述 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...

  7. ●BZOJ 2251 [2010Beijing Wc]外星联络

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2251 题解: 后缀数组,倍增,RMQ 题意:把重复次数超过 1次的子串按字典序输出它们重复的 ...

  8. SPOJ VLATTICE(莫比乌斯反演)

    题意: 在一个三维空间中,已知(0,0,0)和(n,n,n),求从原点可以看见多少个点 思路: 如果要能看见,即两点之间没有点,所以gcd(a,b,c) = 1         /*来自kuangbi ...

  9. ubuntu 16.04常见错误--Could not get lock /var/lib/dpkg/lock解决

    我的博客 ubuntu常见错误--Could not get lock /var/lib/dpkg/lock解决 通过终端安装程序sudo apt-get install xxx时出错: E: Cou ...

  10. 5分钟快速打造WebRTC视频聊天

    百度一下WebRTC,我想也是一堆.本以为用这位朋友( 搭建WebRtc环境 )的SkyRTC-demo 就可以一马平川的实现聊天,结果折腾了半天,文本信息都发不出去,更别说视频了.于是自己动手. 想 ...