android 实现控件左右或上下抖动教程

作者:[JackyCheung] 时间:2023-03-19 17:02:07 

差不多一年前在自己的项目中用过这效果,虽然很简单,但还是写写。

1、首先在你的res目录下新建anim子目录,并在anim目录下新建两个文件:

(1)shake.xml文件(位移/平移:translate),设置起始的位移范围、效果时间、循环次数


<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
 android:fromXDelta="0"
 android:toXDelta="10"
 android:duration="500"
 android:interpolator="@anim/share_cycle">
 <!--.
   fromXDelta:x轴起点抖动位置
   toXDelta:x轴终点抖动位置
   duration:循环播放的时间
   interpolator:循环不放设置(次数)
 -->
</translate>

(2)cycle.xml文件,控制循环次数


<?xml version="1.0" encoding="utf-8"?>
<cycleInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
 android:cycles="2"><!--. 循环次数 -->

</cycleInterpolator><!--. 循环播放 -->

最后给你的控件设置改动画属性

Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake);
ivShake.startAnimation(shake);

这里ivShake是ImageView,就是这么简单。

2、个人碰到一个问题就是在Activity实现监听中添加动画效果第一次没有反应,不知道为什么

补充知识:Android 抖动提示动画

左右抖动


ObjectAnimator animator = ObjectAnimator.ofFloat(textView, "translationX", 0, 100, -100,0);
animator.setDuration(200);
animator.start();

重复左右抖动


Animation translateAnimation = new TranslateAnimation(-20, 20, 0, 0);
translateAnimation.setDuration(100);//每次时间
translateAnimation.setRepeatCount(10);//重复次数
/**倒序重复REVERSE 正序重复RESTART**/
translateAnimation.setRepeatMode(Animation.REVERSE);
nope.startAnimation(translateAnimation);
 public static void Shakeview( View view) {
   Animation translateAnimation = new TranslateAnimation(-10, 10, 0, 0);
   translateAnimation.setDuration(50);//每次时间
   translateAnimation.setRepeatCount(10);//重复次数
/**倒序重复REVERSE 正序重复RESTART**/
   translateAnimation.setRepeatMode(Animation.REVERSE);
   view.startAnimation(translateAnimation);
 }

左右上下抖动


ObjectAnimator animator = tada(clickMe);
animator.setRepeatCount(ValueAnimator.INFINITE);
animator.start();

public static ObjectAnimator tada(View view) {
 return tada(view, 2f);
}

public static ObjectAnimator tada(View view, float shakeFactor) {

PropertyValuesHolder pvhScaleX = PropertyValuesHolder.ofKeyframe(View.SCALE_X,
     Keyframe.ofFloat(0f, 1f),
     Keyframe.ofFloat(.1f, .9f),
     Keyframe.ofFloat(.2f, .9f),
     Keyframe.ofFloat(.3f, 1.1f),
     Keyframe.ofFloat(.4f, 1.1f),
     Keyframe.ofFloat(.5f, 1.1f),
     Keyframe.ofFloat(.6f, 1.1f),
     Keyframe.ofFloat(.7f, 1.1f),
     Keyframe.ofFloat(.8f, 1.1f),
     Keyframe.ofFloat(.9f, 1.1f),
     Keyframe.ofFloat(1f, 1f)
 );

PropertyValuesHolder pvhScaleY = PropertyValuesHolder.ofKeyframe(View.SCALE_Y,
     Keyframe.ofFloat(0f, 1f),
     Keyframe.ofFloat(.1f, .9f),
     Keyframe.ofFloat(.2f, .9f),
     Keyframe.ofFloat(.3f, 1.1f),
     Keyframe.ofFloat(.4f, 1.1f),
     Keyframe.ofFloat(.5f, 1.1f),
     Keyframe.ofFloat(.6f, 1.1f),
     Keyframe.ofFloat(.7f, 1.1f),
     Keyframe.ofFloat(.8f, 1.1f),
     Keyframe.ofFloat(.9f, 1.1f),
     Keyframe.ofFloat(1f, 1f)
 );

PropertyValuesHolder pvhRotate = PropertyValuesHolder.ofKeyframe(View.ROTATION,
     Keyframe.ofFloat(0f, 0f),
     Keyframe.ofFloat(.1f, -3f * shakeFactor),
     Keyframe.ofFloat(.2f, -3f * shakeFactor),
     Keyframe.ofFloat(.3f, 3f * shakeFactor),
     Keyframe.ofFloat(.4f, -3f * shakeFactor),
     Keyframe.ofFloat(.5f, 3f * shakeFactor),
     Keyframe.ofFloat(.6f, -3f * shakeFactor),
     Keyframe.ofFloat(.7f, 3f * shakeFactor),
     Keyframe.ofFloat(.8f, -3f * shakeFactor),
     Keyframe.ofFloat(.9f, 3f * shakeFactor),
     Keyframe.ofFloat(1f, 0)
 );

return ObjectAnimator.ofPropertyValuesHolder(view, pvhScaleX, pvhScaleY, pvhRotate).
     setDuration(1000);
}

来源:https://blog.csdn.net/u012842688/article/details/68944607

标签:android,左右,上下,抖动
0
投稿

猜你喜欢

  • thymeleaf中前后端数据交互方法汇总

    2023-07-18 21:15:59
  • Springboot2.x+ShardingSphere实现分库分表的示例代码

    2023-11-26 01:34:07
  • Android编程实现应用自动更新、下载、安装的方法

    2021-11-15 11:21:39
  • 浅谈C#网络编程详解篇

    2022-10-23 04:30:28
  • c++代码调试方式的几点建议

    2023-07-05 05:31:35
  • springMVC自定义注解,用AOP来实现日志记录的方法

    2023-11-29 13:58:53
  • Java读写文件创建文件夹多种方法示例详解

    2022-11-17 01:08:48
  • 解析:android 如何从JPEG生成BufferedImage

    2022-06-03 20:11:50
  • 5分钟搭建SpringCloud Eureka服务注册中心的实现

    2022-07-12 05:12:42
  • C# TcpClient网络编程传输文件的示例

    2021-10-16 16:01:13
  • C#解析Lrc歌词文件过程详解

    2021-12-26 05:52:38
  • Commons beanutils组件简介

    2023-11-28 07:13:27
  • Java使用Iterator迭代器遍历集合数据的方法小结

    2021-10-28 00:22:40
  • BeanDefinition基础信息讲解

    2022-03-23 23:48:37
  • Java实现将彩色PDF转为灰度PDF的示例代码

    2022-11-26 19:47:41
  • 带你了解Spring中bean的获取

    2021-10-10 09:53:10
  • IntelliJ IDEA 好用插件之analyze inspect code详解

    2021-09-26 22:16:36
  • Jenkins安装以及邮件配置详解

    2023-04-20 12:42:39
  • java高并发的线程中断的几种方式详解

    2022-08-25 01:35:09
  • java生成XML的方法

    2023-08-12 11:45:46
  • asp之家 软件编程 m.aspxhome.com