本文主要介绍Android中如何使用rotate实现图片不停旋转的效果。Android 平台提供了两类动画,一类是 Tween 动画,即通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果;第二类是 Frame 动画,即顺序播放事先做好的图像,跟电影类似。本文分析 Tween动画的rotate实现旋转效果。

在新浪微博客户端中各个操作进行中时activity的右上角都会有个不停旋转的图标,类似刷新的效果,给用户以操作中的提示。这种非模态的提示方式推荐使用,那么下面就分享下如何实现这种效果吧

1、定义一个ImageView

定义一个ImageView是为了装载图片,其中的图片将被rotate用来进行旋转,其他View亦可。

资源文件为

Java代码

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/infoOperating"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@drawable/operating"

android:scaleType="center">

其中的android:src为图片内容,可使用附件中的图片。

java代码为

Java代码

ImageView infoOperatingIV = (ImageView)findViewById(R.id.infoOperating);

2、定义rotate旋转效果

在res/anim文件夹下新建tip.xml文件,内容如下

Java代码

android:fromDegrees="0"

android:toDegrees="359"

android:duration="500"

android:repeatCount="-1"

android:pivotX="50%"

android:pivotY="50%" />

含义表示从0到359度开始循环旋转,0-359(若设置成360在停止时会出现停顿现象)度旋转所用时间为500ms,旋转中心距离view的左顶点为50%距离,距离view的上边缘为50%距离,即正中心,具体每个含义见下面的具体属性介绍。

java代码为

Java代码

Animation operatingAnim = AnimationUtils.loadAnimation(this, R.anim.tip);

LinearInterpolator lin = new LinearInterpolator();

operatingAnim.setInterpolator(lin);

setInterpolator表示设置旋转速率。LinearInterpolator为匀速效果,Accelerateinterpolator为加速效果、DecelerateInterpolator为减速效果,具体可见下面android:interpolator的介绍。

a. 关于其中的属性意义如下(红色部分加以注意):

android:fromDegrees 起始的角度度数

android:toDegrees 结束的角度度数,负数表示逆时针,正数表示顺时针。如10圈则比android:fromDegrees大3600即可

android:pivotX 旋转中心的X坐标

浮点数或是百分比。浮点数表示相对于Object的左边缘,如5; 百分比表示相对于Object的左边缘,如5%; 另一种百分比表示相对于父容器的左边缘,如5%p; 一般设置为50%表示在Object中心

android:pivotY 旋转中心的Y坐标

浮点数或是百分比。浮点数表示相对于Object的上边缘,如5; 百分比表示相对于Object的上边缘,如5%; 另一种百分比表示相对于父容器的上边缘,如5%p; 一般设置为50%表示在Object中心

android:duration 表示从android:fromDegrees转动到android:toDegrees所花费的时间,单位为毫秒。可以用来计算速度。

android:interpolator表示变化率,但不是运行速度。一个插补属性,可以将动画效果设置为加速,减速,反复,反弹等。默认为开始和结束慢中间快,

android:startOffset 在调用start函数之后等待开始运行的时间,单位为毫秒,若为10,表示10ms后开始运行

android:repeatCount 重复的次数,默认为0,必须是int,可以为-1表示不停止

android:repeatMode 重复的模式,默认为restart,即重头开始重新运行,可以为reverse即从结束开始向前重新运行。在android:repeatCount大于0或为infinite时生效

android:detachWallpaper 表示是否在壁纸上运行

android:zAdjustment 表示被animated的内容在运行时在z轴上的位置,默认为normal。

normal保持内容当前的z轴顺序

top运行时在最顶层显示

bottom运行时在最底层显示

b. 运行速度

运行速度为运行时间(android:duration)除以运行角度差(android:toDegrees-android:fromDegrees),比如android:duration为1000,android:toDegrees为360,android:fromDegrees为0就表示1秒转1圈。

c. 循环运行

Java代码

android:fromDegrees="0"

android:toDegrees="360"

android:repeatCount="-1"

android:repeatCount="-1"即表示循环运行,配合上android:fromDegrees="0" android:toDegrees="360"表示不间断

3、开始和停止旋转

在操作开始之前调用

Java代码

if (operatingAnim != null) {

infoOperatingIV.startAnimation(operatingAnim);

}

在操作完成时调用

Java代码

infoOperatingIV.clearAnimation();

许多朋友不知道如何停止旋转animation,所以强制设置rotate转动多少圈表示操作,但却无法与操作实际的进度匹配上,实际上只要如上代码所示清除animation即可。

其他:

对于上面的转动在横屏(被设置为了不重绘activity)时会出现问题,即旋转中心偏移,导致动画旋转偏离原旋转中心。解决如下

Java代码

@Override

public void onConfigurationChanged(Configuration newConfig) {

super.onConfigurationChanged(newConfig);

if (operatingAnim != null && infoOperatingIV != null && operatingAnim.hasStarted()) {

infoOperatingIV.clearAnimation();

infoOperatingIV.startAnimation(operatingAnim);

}

}

android加载转圈动画,android 围绕中心旋转动画相关推荐

  1. android旋转动画开源库,android 围绕中心旋转动画

    本文主要介绍Android中如何使用rotate实现图片不停旋转的效果.Android 平台提供了两类动画,一类是 Tween 动画,即通过对场景里的对象不断做图像变换(平移.缩放.旋转)产生动画效果 ...

  2. android局部翻转动画,android 围绕中心旋转动画

    本文主要介绍Android中如何使用rotate实现图片不停旋转的效果.Android 平台提供了两类动画,一类是 Tween 动画,即通过对场景里的对象不断做图像变换(平移.缩放.旋转)产生动画效果 ...

  3. android 加载列表占位,Android Paging库使用详解(小结)

    Android分页包能够更轻易地在RecyclerView里面缓慢且优雅地加载数据. 许多应用从数据源消耗数据, 数据源里面有大量的数据, 但是一次却只展示一小部分. 分页包帮助应用观测和展示大量数据 ...

  4. android 加载条封装,Android基于JsBridge封装的高效带加载进度的WebView

    图片发自简书App 概述 从去年4月项目就一直用起了JsBridge,前面也针对jsBridge使用姿势介绍过一篇入门篇,<Android JsBridge实战 打造专属你的Hybrid APP ...

  5. android加载网页pdf,android 一行代码搞定加载网络 pdf 文件

    之前写过一篇Android打开本地pdf文件的文章,最后总结的时候说,后面一定要拓展库,让其也能打开网络的的pdf文件.今天终于可以兑现承诺了.frok一份代码github.com/JoanZapat ...

  6. android加载webview网页,android 加载网页Html文本--WebView

    [实例简介]解决了乱码问题 [实例截图] [核心代码] package com.cd.webview_html; import android.app.Activity; import android ...

  7. android 加载大图 代理,Android 加载大图

    在 Android 开发中, Bitmap 是个吃内存大户,稍微操作不当就会 OOM .虽然现在第三方的图片加载库已经很多,很完善,但是作为一个 Androider 还得知道如何自己进行操作来加载大图 ...

  8. android加载百分比功能,android进度条怎么显示百分比

    android布局文件里的ProgressBar长形进度条怎么自 在windows操作系统下Android studio按照如下步骤自动义ProgressBar长形进度条的样式. 首先创建一个andr ...

  9. android 加载谷歌地图,Android调用google地图生成路线图实现代码

    Android程序调用本机googlemap,传递起始和终点位置,生成路线图 if (wodeweizhiPoint != null) { if (wodeweizhiPoint.getLatitud ...

最新文章

  1. 缓存穿透、并发和雪崩那些事
  2. sql怎么实现取当前数据以及累计7天数据_年薪60万+大佬吐血整理字节跳动大数据面试真题...
  3. JS学习笔记:防止发生命名冲突
  4. 云炬创业政策学习笔记20210115
  5. 客户端相关知识学习(五)之什么是webView
  6. Delta Lake——数据湖的可靠性
  7. java setlocation_Java Point.setLocation方法代碼示例
  8. CCF201503-1 图像旋转(100分)【数学计算】
  9. php 控制器方法,ThinkPhp3.2跨控制器调用方法
  10. 微信小程序代码最大限制2M的解决方案
  11. gb和gib的区别_不同软硬件环境下NVMe SSD性能简测和一些SSD测试建议
  12. 网页设计初学者可制作的简单网页——我的第二篇博客
  13. 《淘宝店铺设计装修一册通》一1.4 获得图片的存储空间
  14. Goland 代码飘红
  15. 完整的十字架(漫画)
  16. 关于ubuntu系统不显示wifi图标或WiFi无法连接问题解答
  17. 嵌入式知识框架之六-接口与总线(SPI\I2C\ USB\PCI\PCI-E\SD\SDIO\以太网接口)
  18. 遇到bug我们如何分析定位?
  19. Lecture 002-LP introduction
  20. P4 类,对象,类成员简介

热门文章

  1. JAVA面试--史上最全 69 道 Spring 面试题和答案
  2. 利用系统提供的崩溃日志解Native层Bug
  3. 安装php-swoole的扩展
  4. Android应用中的动画详细使用教程
  5. 字符串面试题(一)— 字符串逆序
  6. 如何在本地搭建多个网站(wampserver)
  7. 【转】窗口之间的主从关系与Z-Order
  8. OSChina 周五乱弹 —— 静静的思考下人生
  9. Active Directory的复制拓扑,Active Directory系列之八
  10. 【整理】PP 成本收集器简介