安卓高级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 ...
随机推荐
- vue-router详解——小白速会
一.概述 vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,适合用于构建单页面应用. vue的单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来. ...
- [LeetCode] Max Chunks To Make Sorted II 可排序的最大块数之二
This question is the same as "Max Chunks to Make Sorted" except the integers of the given ...
- [LeetCode] Course Schedule III 课程清单之三
There are n different online courses numbered from 1 to n. Each course has some duration(course leng ...
- 树莓派控制HC-SR04超声波模块测距(新手向+C语言向)
因为作业要求使用c语言代码,这里先附上一段摘自网上的代码 感谢KalaerSun的c语言代码,摘自https://blog.csdn.net/qq_25247589/article/details/6 ...
- codeforces 842D Vitya and Strange Lesson
题目大意: 定义mex数为数组中第一个没有出现的非负整数.有m个操作,每个操作有一个x,将数组中所有的元素都异或x,然后询问当前的mex Input First line contains two i ...
- 绝世好题bzoj4300
Description 给定一个长度为n的数列ai,求ai的子序列bi的最长长度,满足bi&bi-1!=0(2<=i<=len). Input 输入文件共2行. 第一行包括一个整数 ...
- 【NOIP2012TG】solution
D1T1(Vigenere) 题意:给你一个原串与一个密码串,问你按照题意规则加密后的密文. 解题思路:暴力模拟. #include <stdio.h> ],c[],u1[],u2[]; ...
- 【线段树】【BZOJ1798】【AHOI2009】维护序列
还是那个学弟@lher出的丧题之一. 链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1798 题意简析:就是题目啊... 解题思路:显然是线段树 ...
- ●BZOJ 1069 [SCOI2007]最大土地面积
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1069 题解: 计算几何,凸包,旋转卡壳 其实和这个题差不多,POJ 2079 Triangl ...
- 2015 多校联赛 ——HDU5325(DFS)
Crazy Bobo Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Tota ...