话说实习也就快一个月了,虽然没干什么活,但是这几天总算是有一些可以写的东西。

代码中应该还存在很多问题要修改,大神们请赐教,不胜感激。

开始正题。

关于Android实现任意绕圆或椭圆旋转动画,我称之为“卫星动画”,所以动画类也被称为SatelliteAnimtor。详细代码后附下载,这里就不贴出来了。

这里讲一讲这个类的使用方法。

一、最简单的使用方法

先看效果:

首先是xml文件:

xmlns:tools="http://schemas.android.com/tools"

android:id="@+id/layout"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context="com.light.animation.SatelliteAnimation.SatelliteActivity">

android:id="@+id/hello_tv"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/hello_world"

android:textSize="30sp"/>

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center_horizontal|"

android:onClick="startAnimation"

android:text="执行动画"/>

Activity:

package com.light.animation.SatelliteAnimation;

import android.animation.ValueAnimator;

import android.app.Activity;

import android.graphics.Rect;

import android.os.Bundle;

import android.view.View;

import android.widget.LinearLayout;

import android.widget.TextView;

import com.light.animation.R;

public class SatelliteActivity extends Activity {

private TextView helloTextView;

private SatelliteAnimator satelliteAnimator;

private LinearLayout layout;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_satellite);

helloTextView = (TextView) findViewById(R.id.hello_tv);

layout = (LinearLayout) findViewById(R.id.layout);

}

public void startAnimation(View v){

Rect rect = new Rect();

layout.getLocalVisibleRect(rect);

satelliteAnimator = new SatelliteAnimator(rect);

satelliteAnimator.setAutoScaleEnable(true);

satelliteAnimator.setRepeatMode(ValueAnimator.RESTART);

satelliteAnimator.setRepeatCount(500);

satelliteAnimator.startSatelliteAnimation(helloTextView,0,360,6000);

}

}

可以看到要使用SatelliteAnimator只需要在构造函数中传入一个rect参数,这个rect表示的就是这个动画效果的执行区域。如果rect表示的区域是一个正方形,那么旋转轨迹就会是一个圆,而如果是长方形则轨迹是椭圆。在上段代码里,直接用了layout.getLocalVisibleRect(rect);

所以旋转轨迹是绕着整个屏幕的椭圆。

应该注意一下的是其中还设置了

satelliteAnimator.setAutoScaleEnable(true);把整个开关打开,执行动画的同时会自动的将View进行Scale。

二、最常用的使用方法

有的时候如果我们需要的轨迹不是水平的怎么办?例如斜45度的一个椭圆

为了看得清楚,把helloworld换了一个小图标

先看效果图:

不倾斜的:

再看倾斜90度之后的

可以看到两个动画一个是横着转,一个是竖着转。

来看看代码:

其实有实质性改动的只有这句:

satelliteAnimator = new SatelliteAnimator(rect,90);

构造函数中的90就是绕X轴的旋转角度,将整个轨迹旋转。再来看个45度的就很清楚了:

三、比较没有意义的方法:

函数声明为:

public SatelliteAnimator(Rect rect, float slantDegree, float rotateDegree)其中第三个参数也就是上面我们提到的旋转角度,不需要旋转可以设置为0;

为什么说这个方法比较没有意义呢?其实就是那个slantDegree参数,表示的是Y轴的倾斜角。

最开始我的设想是将一个圆进行坐标轴的倾斜变换,这样可以将一个圆变为椭圆的显示效果。坐标轴的倾斜变化是说正常直角坐标系的X轴与Y轴是成90度夹角的,但是如果这个夹角是60度时,就是将这个slantDegree设置为60的效果。

继续上效果图:

不倾斜的时候这时候轨迹是个圆:

satelliteAnimator = new SatelliteAnimator(rect,90,0);

而倾斜为60度之后:

satelliteAnimator = new SatelliteAnimator(rect,60,0);

对比可以看到设置了倾斜角之后的轨迹变成了椭圆

四、可定制性最强的方法:

函数申明如下:

public SatelliteAnimator(final OvalTrack track, final SlantCoordTranslator slantCoordTranslator, final RotateCoordTranslator rotateCoordTranslator)

其中track是指需要实现的椭圆轨迹,slantCoordTranslator是倾斜角坐标换类,rotateCoordTranslator是旋转坐标转换类。

需要使用这个构造方法来构造动画对象时,需要自己将这些参数对象传入。有兴趣的可以去乱七八糟的源码中看看,一般也不会使用到。

五、启动动画实例化对象之后要启动动画只需要

public void startSatelliteAnimation(View v, float startAngle, float endAngle, int duration)

设置执行动画的视图,起始角度结束角度以及时间。

因为这个动画类是继承自Android原生的ValueAnimator,所以一些ValueAnimator可以设置的参数都应该是支持的。

其实有些动画效果还是挺好玩的,例如这样写:

public void startAnimation(View v){

Rect rect = new Rect(100,100,600,600);

satelliteAnimator = new SatelliteAnimator(rect);

satelliteAnimator.setRepeatMode(ValueAnimator.REVERSE);

satelliteAnimator.setInterpolator(new BounceInterpolator());

satelliteAnimator.setRepeatCount(500);

satelliteAnimator.startSatelliteAnimation(helloTextView,180,360,6000);

}效果图:

代码在这里代码在这里

android 圆动画效果,Android实现任意绕圆或椭圆旋转的动画——SatelliteAnimator使用介绍...相关推荐

  1. 微信小程序 - 【完整源码】实现微信拆红包动画效果,仿微信红包打开时的旋转分离动画功能示例(详细示例源码及注释,一键复制开箱即用)!

    效果图 在微信小程序开发中,实现类似微信抢红包打开动画效果,真实运行丝滑流畅,详细示例源码及注释! 你可以一键复制并运行(无任何第三方依赖),保证可用且直接可以应用到你的项目中去. 示例源码 < ...

  2. android控件之间的过渡动画效果,Android - 交换控件位置:基于LayoutParams的瞬间交换与基于ObjectAnimator动画效果交换...

    现需要交换两个控件(本文中是两个RelativeLayout),找到了两个方法: 1.使用LayoutParams改变两个layout的属性,即其相对关系(below等),实现位置的交换,但是并没有交 ...

  3. html5添加flash动画效果,霸气的HTML5 7款无Flash HTML5动画特效

    本文作者html5tricks,转载请注明出处 以前我们想在网页上实现一些动画特效,第一选择肯定是Flash,但是现在 1.HTML5 Canvas火焰喷射动画效果 还记得以前分享过的一款HTML5烟 ...

  4. android图片gif动画效果,android中类似于gif 实现图片的动画效果

    案例:实现gif动画效果,连续播放图片 由于是转载的,也就没必要多说,直接上代码 案例:在android中实现gif动态图片的效果: EarthAnimationActivity.java packa ...

  5. Android动画效果 translate、scale、alpha、rotate 切换Activity动画 控件位置调整

    2011.10.28注:如果需要控件停在动画后的位置,需要设置android:fillAfter属性为true,在set节点中.默认在动画结束后回到动画前位置.设置android:fillAfter后 ...

  6. android图片跳转动画效果,Android实现Activity界面切换添加动画特效的方法

    本文以实例形式展示了Android实现Activity界面切换添加动画特效的方法,对于Android程序设计人员来说有很好的参考借鉴价值.具体方法如下: 了解Android程序设计的人应该知道,在An ...

  7. android 自定义view 动画效果,Android自定义view----音乐播放动画

    先给大家看一下效果,因为我也不知道这个东西具体叫什么,标题上面写的是"音乐播放动画",可能描述的不太准确. 效果图.gif 前言 最近项目中做了一个音频播放的功能,播放条上需要一个 ...

  8. android listview下拉动画效果,Android开发中利用ListView实现一个渐变式的下拉刷新动画...

    Android开发中利用ListView实现一个渐变式的下拉刷新动画 发布时间:2020-11-23 16:50:31 来源:亿速云 阅读:80 作者:Leah 本篇文章给大家分享的是有关Androi ...

  9. android view显示隐藏动画效果,Android 根据手势顶部View自动展示与隐藏效果

    首先来看一下效果: 大体思路如下: 总体布局用了一个自定义的ViewGroup,里面包了两个View(top View,bottomView) 我在bottomView里放了ViewPager,里面又 ...

最新文章

  1. Provisioning Services 7.8 入门系列教程之十四 UEFI支持和BOOTPTAB 编辑器
  2. 2021年春季学期-信号与系统-第十三次作业参考答案-第七小题
  3. Linux查看关机时间
  4. 为什么说 Java 是按值传递的?
  5. vue 3.0 正式版_Vuejs 3 Release:One Piece. Vuejs 3.0 正式版发布!代号:海贼王
  6. P7115-[NOIP2020]移球游戏【构造】
  7. 前端开发注意事项(HTML与CSS进阶)
  8. struts2上传文件时把文件放到服务器真实路径下的webapps\upload下
  9. 用户输出表单处理php
  10. Oracle 根据dbf文件的数据恢复
  11. CDP、私域运营及数字营销相关名词一览
  12. win10如何还原计算机名,win10电脑一键还原教程
  13. SpringMVC中session的使用
  14. 谋定而后动 知止而有得
  15. su,su -,sudo
  16. 看不起java_程序员铁律,用Tab的瞧不起用Space键的,用C语言的瞧不起用Java的!...
  17. java 银行提现接口,学员提现接口
  18. 洛谷 P2862 [USACO06JAN]把牛Corral the Cows
  19. 从互联网汽车到国企改革:砸钱还是自己干?
  20. 如何用revit打不开服务器文件,Revit教程 | Revit打开文件错误(文件已损坏)

热门文章

  1. Web前端大作业、基于HTML+CSS+JavaScript响应式个人相册博客网站
  2. TensorFlow笔记-06-神经网络优化-损失函数,自定义损失函数,交叉熵
  3. Hadoop 3.x 笔记(配置、命令、脚本、重要图示、代码实现)
  4. 贝叶斯统计推断_统计推断对决:频繁主义者与贝叶斯主义者
  5. 计算机卡登录界面,win10电脑卡在登录界面怎么办
  6. 用Audacity分析浊音、清音、爆破音的时域及频域特性
  7. 2018年10月自考计算机应用基础真题,2018年10月全国自考《计算机应用基础》真题与答案...
  8. 报错Field Mapper in xxx.xxxServiceImpl required a bean of type ‘dao.xxxMapper‘ that could not be found
  9. 智能手机全球普及率今年有望达到63%
  10. windows下hadoop的部署和使用