学习到东西,发出来帮助更多的人,做一个有奉献精神的人!
原文地址;http://blog.csdn.net/catoop/article/details/8051835,原博主实现了摇一摇

在这几天的学习中,添加了状态栏和摇晃完以后的动画

思路;
1.getSystemService(SENSOR_SERVICE)得到SensorManager ,有了它你就可以管理传感器了
2.getSystemService(VEBRATOR_SERVICE)得到手机振动的服务
3.initActionBar 设置手机状态栏的返回键
4.重力感应监听
5handler发送消息
6监听到以后 执行动画
代码如下
布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayoutxmlns: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.dong.shake.MainActivity"><ImageViewandroid:id="@+id/iv_shake"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:src="@mipmap/shake_logo"/>
</RelativeLayout>

activity中的代码

public class MainActivity extends AppCompatActivity {@Bind(R.id.iv_shake)ImageView ivShake;private static final String TAG = "TestSensorActivity";private static final int SENSOR_SHAKE = 10;private SensorManager sensorManager;private Vibrator vibrator;private boolean isShaking = false;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ButterKnife.bind(this);sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);initActionBar();//可以设置状态栏的按钮和内容(返回键)}private void initActionBar() {ActionBar actionBar = getSupportActionBar();actionBar.setDisplayHomeAsUpEnabled(true);actionBar.setTitle("摇一摇");}@Overrideprotected void onResume() {super.onResume();if (sensorManager != null) {// 第一个参数是Listener,第二个参数是所得传感器类型,第三个参数值获取传感器信息的频率sensorManager.registerListener(sensorEventListener, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);}}@Overrideprotected void onPause() {super.onPause();if (sensorManager != null) {// 取消监听器sensorManager.unregisterListener(sensorEventListener);}}/*** 重力感应监听*/private SensorEventListener sensorEventListener = new SensorEventListener() {@Overridepublic void onSensorChanged(SensorEvent event) {// 传感器信息改变时执行该方法float[] values = event.values;float x = values[0]; // x轴方向的重力加速度,向右为正float y = values[1]; // y轴方向的重力加速度,向前为正float z = values[2]; // z轴方向的重力加速度,向上为正Log.i(TAG, "x轴方向的重力加速度" + x + ";y轴方向的重力加速度" + y + ";z轴方向的重力加速度" + z);// 一般在这三个方向的重力加速度达到40就达到了摇晃手机的状态。int medumValue = 19;// 三星 i9250怎么晃都不会超过20,没办法,只设置19了if (Math.abs(x) > medumValue || Math.abs(y) > medumValue || Math.abs(z) > medumValue) {vibrator.vibrate(200);Message msg = new Message();msg.what = SENSOR_SHAKE;handler.sendMessage(msg);}}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {}};/*** 动作执行*/Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);switch (msg.what) {case SENSOR_SHAKE:if (!isShaking) {startAnim();isShaking = true;}break;}}};//定义摇一摇动画动画private void startAnim() {AnimationSet animup = new AnimationSet(true);TranslateAnimation animation0 = new TranslateAnimation(Animation.RELATIVE_TO_SELF,0f,Animation.RELATIVE_TO_SELF, -0.5f,Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF,0.f);animation0.setDuration(300);TranslateAnimation animation1 = new TranslateAnimation(Animation.RELATIVE_TO_SELF,-0.5f,Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF,0.f);animation1.setDuration(300);animation1.setStartOffset(300);TranslateAnimation animation2 = new TranslateAnimation(Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0f,Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF,0.f);animation2.setDuration(300);animation2.setStartOffset(600);animup.addAnimation(animation0);animup.addAnimation(animation1);animup.addAnimation(animation2);animup.setRepeatCount(Animation.RESTART);ivShake.startAnimation(animup);ivShake.getAnimation().setAnimationListener(new Animation.AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {}@Overridepublic void onAnimationEnd(Animation animation) {isShaking = false;}@Overridepublic void onAnimationRepeat(Animation animation) {}});}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case android.R.id.home://回退finish();break;}return super.onOptionsItemSelected(item);}
}

源码地址:https://github.com/moyanqi/Shake.git

高仿微信摇一摇,动画效果为左右晃动相关推荐

  1. Android UI设计与开发】第03期:引导界面(三)仿微信引导界面以及动画效果

    转载请注明出处:http://blog.csdn.net/yangyu20121224/article/details/8985457        基于前两篇比较简单的实例做铺垫之后,这一篇我们来实 ...

  2. 引导界面(三)仿微信引导界面以及动画效果

    基于前两篇比较简单的实例做铺垫之后,这一篇我们来实现一个稍微复杂一点的引导界面的效果,当然也只是稍微复杂了一点,对于会的人来说当然还是so easy!正所谓会者不难,难者不会,大概说的就是这个意思了吧 ...

  3. 高仿微信朋友圈图片展示效果 ImageWatcher

    ImageWatcher 大图查看,它能够 * 动画顺畅切换到查看状态,同样动画顺畅退出查看界面 * 左右滑动多图查看 * 仿微信下拽退出 示例下载 在 previews文件夹下 app-debug. ...

  4. 高仿微信对话列表滑动删除效果

    前言 用过微信的都知道.微信对话列表滑动删除效果是非常不错的,这个效果我们也能够有. 思路事实上非常easy,弄个ListView.然后里面的每一个item做成一个能够滑动的自己定义控件就可以.由于L ...

  5. iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...

    2019独角兽企业重金招聘Python工程师标准>>> iOS精选源码 iOS高仿微信完整项目源码 Khala: Swift 编写的iOS/macOS 路由框架 微信左滑删除效果的实 ...

  6. iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码

    iOS精选源码 iOS高仿微信完整项目源码 Khala: Swift 编写的iOS/macOS 路由框架 微信左滑删除效果的实现与TableViewCell的常用样式介绍 实现阴影圆角并存,渐变色背景 ...

  7. php仿微信语音条,html5的audio实现高仿微信语音播放效果

    前言 之前做过一个微信的项目,专家回复可以录音,然后储存成mp3格式,前台可以获取mp3,客户可以在线试听mp3录音效果,今天就简单分享一下这个效果如何实现,及实现思路和方法! 效果图 前台大体呈现效 ...

  8. 高仿微信抢红包动画特效

    昨天与一个兄弟聊天时他说想搞个翻转动画,类似于微信抢红包时硬币旋转的效果.平时这个动画没怎么注意,当时就装作一脸蒙蔽的样子让他给我发红包.(哈哈,可惜他没上当...) 最后自发自抢体验了一下(轻喷.. ...

  9. html5的audio实现高仿微信语音播放效果

    效果图 前台大体呈现效果图如下: 点击就可以播放mp3格式的录音.点击另外一个录音,当前录音停止! 思路 关于播放动画,这个很简单,我们可以用css3的逐帧动画来实现.关于逐帧动画,我之前的文章也写过 ...

  10. iOS高仿微信悬浮窗、忍者小猪游戏、音乐播放器、支付宝、今日头条布局滚动效果等源码...

    iOS精选源码 iOS WKWebView的使用源码 模仿apple music 小播放器的交互实现 高仿微信的悬浮小窗口 iOS仿支付宝首页效果 [swift]仿微信悬浮窗 类似于今日头条,网易新闻 ...

最新文章

  1. EJS学习(三)之语法规则中
  2. ASP.NET 2.0中实现模板中的数据绑定
  3. 4.6.2 定义内表
  4. Oracle 等待事件(Wait Event):Sync ASM rebalance 解析
  5. 存储过程 while is null_java 自动化 使用存储过程构造测试数据
  6. 让你的Android应用与外部元素互动起来
  7. php根据关键字搜索,javascript、php关键字搜索函数的使用方法
  8. Atitit 常见每日流程日程日常工作.docx v7 r8f
  9. paip.c3p0 数据库连接池 NullPointerException 的解决...
  10. 基于ADS500MHZ带通滤波器
  11. VS安装VAssistX插件导致WPF-XAML文件输入中文出现乱码问题解决方案
  12. Windows Mac 光盘刻录软件
  13. pycharm 文件名不同颜色所代表的含义
  14. OpenShift 4 - 在 GitOps 中使用 SealedSecret 保护敏感数据
  15. 智能蓝牙音箱方案的四大问题
  16. erlang io:format io_lib:format
  17. rgb的颜色转换以及十六进制转为十进制的那些事
  18. 小丸子学MongoDB系列之——部署MongoDB副本集
  19. UUID简介以及java代码获取UUID示例
  20. 计算机安全使用环境及要求吗,计算机安全使用环境及要求02

热门文章

  1. lol为什么说服务器维修中,lol与服务器之间的通讯出现问题怎么解决
  2. ZYNQ 7000成长记——菜鸟从零开始学嵌入式linux(前言)
  3. 数字调制系统工作原理_浙江红警系统马路警示灯工作原理近期行情
  4. 汇佳学校凝心聚力缔造教育的第三选择
  5. 免费午餐结束!支付宝开始提现收费啦
  6. java平台利用jsoup开发包,抓取优酷视频播放地址与图片地址等信息。
  7. Android Studio GBK转换UTF-8
  8. 6分钟 Python 爬虫入门
  9. IP地址(内网与外网)
  10. upload-labs-03