效果图:

所用的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. BeautifulSoup重点复习

    html = """ <html><head><title>The Dormouse's story</title>< ...

  2. Oracle数据库(3-7)

    显式游标使用主要有四个步骤: 声明/定义游标打开游标读取数据关闭游标 CASE 条件表达式 WHEN 条件表达式结果1 THEN 语句1 WHEN 条件表达式结果2 THEN 语句2 ...... W ...

  3. https://segmentfault.com/a/1190000004518374#articleHeader3

    https://segmentfault.com/a/1190000004518374#articleHeader3 https://segmentfault.com/q/10100000049065 ...

  4. [LeetCode] Boundary of Binary Tree 二叉树的边界

    Given a binary tree, return the values of its boundary in anti-clockwise direction starting from roo ...

  5. [LeetCode] K-diff Pairs in an Array 数组中差为K的数对

    Given an array of integers and an integer k, you need to find the number of unique k-diff pairs in t ...

  6. [LeetCode] Number Complement 补数

    Given a positive integer, output its complement number. The complement strategy is to flip the bits ...

  7. react组件开发规范(一)

    这是通过修改项目运行在Google上时的警告,总结的的部分react组件开发规范: (1)编写组件时,一定要写PropTypes,切莫为了省事儿而不写! 如果一个Props不是required,一定在 ...

  8. python基础面试

     1  请用自己的算法, 按升序合并如下两个list, 并去除重复的元素: list1 = [2, 3, 8, 4, 9, 5, 6]list2 = [5, 6, 10, 17, 11, 2] 答案: ...

  9. [SDOI 2014]数表

    Description 有一张N×m的数表,其第i行第j列(1 < =i < =N,1 < =j < =m)的数值为 能同时整除i和j的所有自然数之和.给定a,计算数表中不大于 ...

  10. [SDOI 2008]沙拉公主的困惑

    Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大户沙拉公主决定预测一下大富翁国现 ...