Animation的使用「建议收藏」

Animation的使用「建议收藏」Animation(动画)有两种分类:补间动画(Tween)和帧动画(Frame)补间动画主要有以下几种:旋转(RotateAnimation)平移(TranslateAnimation)拉伸(ScaleAnimation)透明度(AlphaAnimation)实现的方式:1.实例相应的动画对象2.加载资源中的动画文件动画的属性d

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

Animation(动画)有两种分类:补间动画(Tween)和帧动画(Frame)

补间动画主要有以下几种:

旋转(RotateAnimation)

平移(TranslateAnimation)

拉伸(ScaleAnimation)

透明度(AlphaAnimation)

实现的方式:

1.实例相应的动画对象

2.加载资源中的动画文件

动画的属性

duration:动画持续的时间

filiAfter:为true保持结束时的状态,为false变回最初的状态

repeatCount:重复的次数(不包括第一次)

startOffset:距离动画开始的时间

repeatMode:1表示重新开始,2表示从最后一个状态往回逆序播放

帧动画:

实现方法

1.实例AnimationDrawable

2.在drawable新建类型为animation-list的xml文件,然后加载该文件

代码如下

package com.example.animaction;

import android.os.Bundle;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.AnimationUtils;
import android.view.animation.CycleInterpolator;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.TextView;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;
@SuppressLint("NewApi")
public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		TextView tv = (TextView) findViewById(R.id.tv);
		/**
		 * 透明度动画
		 */
		// 方法一:
		// 参数1为起始透明度,参数2为结束透明度
		// AlphaAnimation alphaAnimation = new AlphaAnimation(1,
		// 0.5f);//1能自动转换为float,0.5默认为double值
		AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0);
		// 设置执行时间,默认为0
		alphaAnimation.setDuration(3000);
		// 重复次数
		alphaAnimation.setRepeatCount(3);
		// 重复模式,Animation.RESTART:从头开始,Animation.REVERSE:逆序
		alphaAnimation.setRepeatMode(Animation.REVERSE);
		// 设置结束时状态,为true保持结束时状态,false变回原先的状态
		alphaAnimation.setFillAfter(true);

		// 方法二:
		// 加载资源中的动画文件
		Animation alphaAnimation1 = AnimationUtils.loadAnimation(this,
				R.anim.alpha_anim);
		tv.startAnimation(alphaAnimation1);

		/**
		 * 平移动画
		 */
		/*
		 * @parm
		 * fromXType-->起始x坐标的类型,三种类型:Animation.ABSOLUTE,RELATIVE_TO_PARENT,
		 * RELATIVE_TO_SELF
		 * 
		 * @parm fromXValue-->如果类型为ABSOLUTE,值就为绝对值,单位px
		 * RELATIVE_TO_PARENT,相对于父控件的位置,值为float(-1~1) RELATIVE_TO_SELF:相对自身控件的位置
		 * 
		 * @parm toXType -->结束时x坐标的位置
		 * 
		 * @parm toXValue -->结束时x坐标的值 其他四个参数与上面一样
		 * 
		 * 另一个构造方法默认使用ABSOLUTE类型
		 */
		// 表示从相对自身控件0.5的位置水平平移到父控件0.5的位置
		TranslateAnimation translateAnimation = new TranslateAnimation(
				Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_PARENT,
				0.5f, 0, 0, 0, 0);
		translateAnimation.setDuration(3000);
		tv.startAnimation(translateAnimation);

		/**
		 * 缩放动画
		 */
		/*
		 * x方向:fromX ,toX-->缩放的比例从0.5(会直接变成原来的一半,没有动画效果)变成1.5 y方向:fromY ,toY
		 * 后面四个参数确定缩放的中心点。 4个参数类型为相对自身控件 6个参数类型为绝对的
		 */
		// 如果类型是相对父控件,就相当于把控件拉大到父控件中心的位置
		ScaleAnimation scaleAnimation = new ScaleAnimation(0, 1.0f, 0, 1.0f,
				Animation.RELATIVE_TO_PARENT, 0.5f,
				Animation.RELATIVE_TO_PARENT, 0.5f);
		scaleAnimation.setDuration(3000);
		tv.startAnimation(scaleAnimation);

		/**
		 * 旋转动画
		 */
		/*
		 * fromDegrees-->起始角度,toDegrees-->结束角度 后面四个参数为确定旋转的中心点
		 */
		RotateAnimation rotateAnimation = new RotateAnimation(0, 180,
				Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
				0.5f);
		rotateAnimation.setDuration(5000);
		// 循环播放,参数循环的次数,会在setDuration的时间中循环完,循环为0~180,0~-180算一次
		CycleInterpolator cycleInterpolator = new CycleInterpolator(20);
		rotateAnimation.setInterpolator(cycleInterpolator);
		tv.startAnimation(rotateAnimation);

		/**
		 * 动画集合
		 */
		// 方法一:
		Animation set = AnimationUtils.loadAnimation(this, R.anim.set);
		// start马上执行,set可能不会马上执行
		tv.startAnimation(set);

		// 如果参数为true,所以动画都执行同一个变速器即set设置的变速器,false执行各自的变速器
		AnimationSet set2 = new AnimationSet(false);
		set2.addAnimation(rotateAnimation);
		scaleAnimation.setStartOffset(10000);
		set2.addAnimation(scaleAnimation);
		
		
		/**
		 * 帧动画
		 */
		//第一种
		//AnimationDrawable间接继承Drawable
		AnimationDrawable ad = new AnimationDrawable();
		Drawable frame1 = getResources().getDrawable(R.drawable.ic_launcher);
		ad.addFrame(frame1, 1000/*显示的时间*/);
		//动画只执行一次
		ad.setOneShot(true);
		tv.setBackground(ad);
		ad.start();//开始动画
		ad.stop();//结束之后再开始从头开始播放
		
		//第二种
		tv.setBackgroundResource(R.drawable.list);
		AnimationDrawable ad1 = (AnimationDrawable) tv.getBackground();
		ad1.start();
	}

	@Override
	public void finish() {
		super.finish();
		// 当startActivity或者finish之后,设置页面切换的动作效果
		overridePendingTransition(/* 进入的页面的动画 */R.anim.alpha_anim, /* 离开的页面的动画 */
				R.anim.set);
	}

}

Jetbrains全家桶1年46,售后保障稳定

XMLz

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromAlpha="1"
    android:toAlpha="0.5"
    android:duration="3000"
    android:repeatMode="restart"
    android:repeatCount="3">
    

</alpha>

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <alpha
        android:duration="3000"
        android:fromAlpha="0"
        android:toAlpha="1" />

    <!-- 只能设置相对自身的缩放 -->
    <scale
        android:duration="3000"
        android:fromXScale="0"
        android:fromYScale="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1"
        android:toYScale="1" />
    
    <rotate 
        android:duration="3000"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fromDegrees="0"
        android:toDegrees="360"/>
    
    <translate 
        android:duration="3000"
        android:fromXDelta="0"
        android:toXDelta="100%"/>

    <!-- android:startOffset="3000":三秒之后才会执行 -->
    <alpha
        android:duration="3000"
        android:fromAlpha="1"
        android:startOffset="3000"
        android:toAlpha="0" />

</set>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/230824.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • EJB 学习笔记

    EJB 学习笔记EJB学习笔记1、ejb基础知识(1)无状态会话bean不保存客户机的会话状态优点:使用小量的实例即可满足大量的客户。每个实例都没有标识,相互之间是等价的。等?的无状态会话bean:多次和一次调用的结果和效应相同。在集群中可以负载均衡a机器失败,可以在b机器上重试非等?的无

  • 基于java的小区物业管理系统_java做一个管理系统

    基于java的小区物业管理系统_java做一个管理系统本系统采用java和mysql数据库开发的BS架构系统,本系统分为业主和物业管理员两个角色,在用户子系统中,使用者通过账号密码(用户)登入系统,进入主页,通过主页链接,进入小区服务,小区公告,信息查询,系统功能四个功能模块,在模块内可以完成报修,查看公告,查询房产相关信息,修改密码,退出系统等功能。在管理员子系统中,使用者通过帐号密码(管理员)登入系统,进入主页,通过主页链接进入管理员信息管理,物业管理,报修管理,保卫绿化,公告管理,系统功能六个功能模块。…

    2022年10月10日
  • rabbitmq集群搭建_rabbitmq创建队列

    rabbitmq集群搭建_rabbitmq创建队列一普通集群以如下两台服务器为例ip:172.16.9.8hostname:rabbitmq1(master)ip:172.16.9.9hostname:rabbitmq2(slave)1.修改host文件编辑/etc/hosts文件,添加172.16.9.8rabbitmq1172.16.9.9rabbitmq22.复制cookie内容打开文件然后需要先把172.16.9.8服务器的/var/lib/rabbitmq/.erla…

  • CSS入门学习笔记+案例

    CSS入门学习笔记+案例CSS入门学习一、CSS简介1、什么是CSSCSS:CascadingStyleSheet层叠样式表是一组样式设置的规则,用于控制页面的外观样式2、为什么使用CSS实现内容与样式的分离,便于团队开发样式复用,便于网站的后期维护页面的精确控制,让页面更精美3、CSS作用页面外观美化布局和定位二、基本用法1、CSS语法<head> <style> 选择器{ 属性名:属性值; 属性名:属性值; } </style>&l

  • JAVA基础:二维数组初始化

    JAVA基础:二维数组初始化二维数组的初始化同一维数组初始化类似,同样可以使用”{}”大括号完成二维数组的初始化,不同的是每个一维数组的元素使用大括号定义新的一维数组,即一维数组的每个元素又是一个新的一维数组。定义一个二维数组:把二维数组所有的赋同一个初始化值arrayType[][]arrayName=new arrayTyp[n][m];for(inti=0;iarrayName.l

  • L0/L1/L2/无穷范数

    L0范数:向量中非零元素的个数L1范数:向量中各个元素绝对值的和L2范数:向量中元素平方的和,再开方;即向量的模长无穷范数:向量中各个元素绝对值的最大值 关于范数,有个好文章:http://blog.csdn.net/zouxy09/article/details/24971995重要部分贴过来(感谢作者): 好了,这里兑现上面的承诺,来直观的聊聊L1和L2的差别,…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号