安卓高级5 传感器和震动 模仿微信摇一摇Ui效果
效果图:
所用的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效果的更多相关文章
- (转)ZXing生成二维码和带logo的二维码,模仿微信生成二维码效果
场景:移动支付需要对二维码的生成与部署有所了解,掌握目前主流的二维码生成技术. 1 ZXing 生成二维码 首先说下,QRCode是日本人开发的,ZXing是google开发,barcode4j也是老 ...
- Android 模仿微信发送图片 钟罩效果
参考资料http://trylovecatch.iteye.com/blog/1189452 http://bbs.51cto.com/thread-1031415-1.html### 1.添加资源文 ...
- 玩转Android之加速度传感器的使用,模仿微信摇一摇
Android系统带的传感器有很多种,最常见的莫过于微信的摇一摇了,那么今天我们就来看看Anroid中传感器的使用,做一个类似于微信摇一摇的效果. OK ,废话不多说,我们就先来看看效果图吧: 当我摇 ...
- 自定义控件(模仿微信ToggleButton控件)
弄过android开发的都知道,系统有一个默认的ToggleButton,但很多人都觉得他很难看,当然也包括我.如果你感觉他不难看,那你就继续使用系统的吧,这篇文章对你来说是多余的了. 今天来写一个模 ...
- 利用传感器(sensor)实现微信摇一摇动画
所需要的权限: <uses-permission android:name="android.permission.VIBRATE"></uses-permiss ...
- Android Studio精彩案例(三)《模仿微信ViewPage+Fragment实现方式二》
转载本专栏文章,请注明出处,尊重原创 .文章博客地址:道龙的博客 写在前面的话:此专栏是博主在工作之余所写,每一篇文章尽可能写的思路清晰一些,属于博主的"精华"部分,不同于以往专栏 ...
- iOS-高仿微信摇一摇动画效果加震动音效
概述 摇一摇动画效果 (加震动音效) 详细 代码下载:http://www.demodashi.com/demo/10707.html 众所周知, 微信中的摇一摇功能: 搜索人/歌曲/电视,同样在一些 ...
- css模仿微信弹出菜单
css模仿微信弹出菜单 效果图: html: <div class="action-sheet-backdrop"> <div class="act ...
- js模仿微信语音播放的小功能
自己写的一个模仿微信语音播放的小功能,实现的主要功能是:点击播放,点击暂停,播放切换,,, 代码如下: <!DOCTYPE html> <html lang="en&qu ...
随机推荐
- html标记语言 --表单
html标记语言 --表单 七.表单 1.表单标记 1.1表单中的内容 <form></form>定义表单的开始位置和结束位置,表单提交时的内容就是<form>表单 ...
- html如何实现的
超文本标记语言是标准通用标记语言下的一个应用,也是一种规范,一种标准,它通过标记符号来标记要显示的网页中的各个部分.网页文件本身是一种文本文件,通过在文本文件中添加标记符,可以告诉浏览器如何显示其中的 ...
- MySQL 表空间传输
聊到MySQL数据迁移的话题,表空间传输时一个很实用的方法. 在MySQL 5.6 Oracle引入了一个可移动表空间的特征(复制的表空间到另一个服务器)和Percona Server采用部分备份,这 ...
- Bootstrap File Input 中文文档
手动安装 您也可以手动地安装插件到你的项目中.只要下载源ZIP或TAR球和提取资产(CSS和JS插件文件夹)到你的项目中. 使用 步骤1:在你页面头部加载以下类库. <link href=&qu ...
- mac版chrome升级到Version 65.0.3325.18后无法打开百度bing搜狗
mac版本chrome升级到Version 65.0.3325.18后发现突然无法访问百度,搜狗,bing,神马等一系列的国内搜索引擎网站.连百度的儿子们比如知道,百度百科都无法访问. 1.首先想到的 ...
- 数据结构与算法 —— 链表linked list(04)
我们在上篇文章里面提到了链表的翻转,给定一个链表,对每两个相邻的节点作交换,并返回头节点,今天的这道题是它的升级版,如下: k个一组翻转链表 给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链 ...
- NC帮助文档网址
NC帮助文档: https://wenku.baidu.com/view/2d05a77c0b4e767f5acfceb6.html NC方法总结: ...
- python学习笔记1--python简介和第一行代码编写
一.什么是python? python是一种面向对象,解释型语言,它语法简介,容易学习.本节博客就来说说本人学习python的心得体会. 二.python环境安装 目前python版本有python2 ...
- 坑:JavaScript 中 操作符“==” 和“===” 的区别
标题:JavaScript 中 操作符"==" 和"===" 的区别 记录一些很坑的区别: 1. '' == '0' // false 0 == '' // t ...
- ●Joyoi Dotp 驱逐猪猡
题链: http://www.joyoi.cn/problem/tyvj-2610题解: 期望dp,高斯消元 对于每一种到达i点的方案,都存在一个概率p, 令dp[i]表示到达i点的期望次数,那么容易 ...