android 实现控件左右或上下抖动教程
作者:[JackyCheung] 发布时间:2023-03-19 17:02:07
标签:android,左右,上下,抖动
差不多一年前在自己的项目中用过这效果,虽然很简单,但还是写写。
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


猜你喜欢
- springMVC的生命周期,听到的时候都没有反应过来,springMVC还有生命周期?现在看来生命周期就是springMVC的流程,Spr
- string 类型是C#的基元类型之一,它是一个引用类型,对应FCL中的System.String类型。string 类型和普通的引用类型相
- 前言一大早还在北京拥挤的地铁里,我的CTO闫哥在微信里给我发了一条信息:Android Studio 3.0发布了。为什么会这么关注Andr
- 前言面对众多卡片层叠效果,我们的产品童鞋也突发奇想,搞出了另一种卡片层叠切换展示的交互,而且产品狗们居然要求多做几种动效给他们看,好让他们选
- 背景SpringBoot的应用监控方案比较多,SpringBoot+Prometheus+Grafana是目前比较常用的方案之一。它们三者之
- 对于之前最火的无外乎集五福了,而五福除了加十个好友获得外,最直接的途径就是支付宝的咻一咻了。那么咻一咻具体有哪些实现方式呢?下面我们将一一介
- 本文实例讲述了C#利用Random得随机数求均值、方差、正态分布的方法。分享给大家供大家参考。具体如下:最近在做中小学试卷分析系统,其中数据
- 现在Android智能手机的像素都会提供照相的功能,大部分的手机的摄像头的像素都在1000万以上的像素,有的甚至会更高。它们大多都会支持光学
- 现在很多app的首页都有一个倒计时控件,比如说3秒或者5秒自动跳转界面,或者点击控件直接跳过首先,自定义控件CircleProgressba
- 一、国际化准备资源文件,资源文件的命名格式如下:baseName_language_country.propertiesbaseName_l
- EntityWrapper的in用法EntityWrapper<UserLife> wrapper = new EntityWr
- 上一篇文章Mybatis逆工程的使用主要是讲了mybatis-generator-core-1.3.2.jar的使用,这一篇我要介绍的是,修
- Java 序列化和反序列化实例详解在分布式应用中,对象只有经过序列化才能在各个分布式组件之间传输,这就涉及到两个方面的技术-发送者将对象序列
- 到底什么是反射呢???反射的核心就是JVM在运行时才动态加载类或调用方法,访问属性,它不需要事先(写代码的时候或编译期)知道运行对象是谁。每
- C#时间显示格式一起看下:24小时制this.toolStripStatusLabel1.Text = “您好,欢迎来到XXXX控制系统!”
- 前置工作:项目配置升到对应的29版本compileSdkVersion: 29,buildToolsVersion: ‘29.0.0'
- 不记得从哪找的了,修改了部分代码,修复在Android平台下使用时,时区时间格式异常的问题。package cn.aikongmeng.de
- 本文实例讲述了Java线程同步方法。分享给大家供大家参考,具体如下:1. Semaphore1.1 二进制SemaphoreSemaphor
- JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。同X
- 当我们要创建一个Tcp/Ip Server connection ,我们需要一个范围在1000到65535之间的端口 。但是本机一个端口只能