Android开发基础之-----------补间动画

Android面试题之动画+事件处理篇,ndk开发入门 提示:秋招在即,计蒙准备在国庆假期结束前整理一套Android初级面试题籍,希望对大家有所帮助提示:以下是本篇文章正文内容动画1、Android 中的动画有哪几类帧动画、补间动画、属性动画2、动画能组合在一起使用么?可以将动画组合在一起使用AnimatorSet,AnimatorSet.play() 播放当前动画的同时可以.with() :将现有动画和传入的动画同时执行.after() :将现有动画插入到传入的动画之后执行.before() : 将现有动画插入到传入的动画之前执行。 阅读详情

补间动画:图片的原形态到新形态过度过程中生成的动画。包括位移、旋转、透明和缩放。

用到的四个类:TranslateAnimation  scaleAnimation  AlphaAnimation   RotateAnimation   这四个类都继承了Animation。

效果图:

点击每个按钮实现响应的效果。。。

实现步骤:   1.布局文件包括以上几个按钮和一个ImageView,比较简单,代码就不贴了。

2.然后就是找到控件设置控件的点击事件。

代码:

package com.hasee.animation;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ImageView;

public class MainActivity extends Activity {
    private ImageView iv;
	private Button ta;
	private Button sa;
	private Button  aa;
	private Button to;
	private Button ra;
	private TranslateAnimation a1;
	private ScaleAnimation a2;
	private AlphaAnimation a3;
	private RotateAnimation a4;

	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        iv = (ImageView) findViewById(R.id.iv);
        ta = (Button) findViewById(R.id.bt_weiyi);
        sa = (Button) findViewById(R.id.bt_suofang);
        aa = (Button) findViewById(R.id.bt_touming);
        to = (Button) findViewById(R.id.bt_yiqifei);
        ra = (Button) findViewById(R.id.bt_xuanzhuan);
        
        //位移
        ta.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				a1 = new  TranslateAnimation(-100,100,-50,50);
				//设置位移移动时间
				a1.setDuration(2000);
				//位移移动次数
				a1.setRepeatCount(2);
				//设置重复模式
				a1.setRepeatMode(Animation.REVERSE);
				//让组件停留在结束位置
				a1.setFillAfter(true);
				iv.startAnimation(a1);
			}
		});
        //缩放
        sa.setOnClickListener(new OnClickListener() {
        	
        	@Override
        	public void onClick(View v) {
        		a2 = new ScaleAnimation(2,0.5f, 1.5f,0.4f);
        		//设置位移移动时间
				a2.setDuration(2000);
				//位移移动次数
				a2.setRepeatCount(2);
				//设置重复模式
				a2.setRepeatMode(Animation.REVERSE);
				//让组件停留在结束位置
				a2.setFillAfter(true);
				iv.startAnimation(a2);
        	}
        });
        
        
        //透明
        aa.setOnClickListener(new OnClickListener() {
        	
        	@Override
        	public void onClick(View v) {
        		// TODO Auto-generated method stub
        		a3 = new AlphaAnimation(1,0.2f);
        		//设置位移移动时间
				a3.setDuration(2000);
				//位移移动次数
				a3.setRepeatCount(1);
				//设置重复模式
				a3.setRepeatMode(Animation.REVERSE);
				//让组件停留在结束位置
				a3.setFillAfter(true);
				iv.startAnimation(a3);
        	}
        });
        //一起飞
        to.setOnClickListener(new OnClickListener() {
        	
        	@Override
        	public void onClick(View v) {
        		//创建动画集合,传入false表示每个动画使用自己的校对器
        		AnimationSet set = new AnimationSet(false);
        		set.addAnimation(a1);
        		set.addAnimation(a2);
        		set.addAnimation(a3);
        		set.addAnimation(a4);
        		
        		iv.setAnimation(set);
        		
        	}
        });
        //旋转
        ra.setOnClickListener(new OnClickListener() {
        	
        	@Override
        	public void onClick(View v) {
        		//a4 = new RotateAnimation(0, 720);
        		a4 = new RotateAnimation(0, 720,iv.getWidth()/2,iv.getHeight()/2);
        		a4.setDuration(2000);
        		a4.setRepeatCount(1);
        		a4.setRepeatMode(Animation.REVERSE);
        		a4.setFillAfter(true);
        		iv.startAnimation(a4);
        	}
        });
    }
}
************************************************************************************************************************************

一个小应用:实现图片的2D反转

布局文件:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:id="@+id/screen"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <ImageView
        android:id="@+id/iv_E"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/e"
         />
    <ImageView
        android:id="@+id/iv_A"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:src="@drawable/dog"
         />

</FrameLayout>

逻辑实现:

package com.hasee.reverse;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.ScaleAnimation;
import android.widget.ImageView;

public class MainActivity extends Activity {
	
	//设置图片收缩和扩展两个动作
	private ScaleAnimation sa0 = new ScaleAnimation(1, 0, 1, 1,//设置收缩动作
							Animation.RELATIVE_TO_PARENT, 0.5f,//设置中心点
							Animation.RELATIVE_TO_PARENT, 0.5f);
	private ScaleAnimation sa1 = new ScaleAnimation(0, 1, 1, 1,//设置扩展动作
			Animation.RELATIVE_TO_PARENT, 0.5f,//设置中心点
			Animation.RELATIVE_TO_PARENT, 0.5f);
	private ImageView imgA;
	private ImageView imgE;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        findViewById(R.id.screen).setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				if(imgA.getVisibility() == View.VISIBLE){
		        	imgA.startAnimation(sa0);
		        }else{
		        	imgE.startAnimation(sa0);
		        }
			}
		});
        
    }
	private void initView() {
		imgA = (ImageView) findViewById(R.id.iv_A);
		imgE = (ImageView) findViewById(R.id.iv_E);
		showA();//初始默认是xx的照片
		sa0.setDuration(500);
		sa1.setDuration(500);
		//监听图片缩放结束
		sa0.setAnimationListener(new AnimationListener() {			
			@Override
			public void onAnimationStart(Animation animation) {
				// TODO Auto-generated method stub				
			}
			@Override
			public void onAnimationRepeat(Animation animation) {
				// TODO Auto-generated method stub	
			}
			
			@Override
			public void onAnimationEnd(Animation animation) {
				//缩放动作结束,就执行另一个图片的扩展动作,但是需要判断具体哪一个图片
				if(imgA.getVisibility() == View.VISIBLE){
					imgA.setAnimation(null);
					showE();
					imgE.startAnimation(sa1);
				}else{
					imgE.setAnimation(null);
					showA();
					imgA.startAnimation(sa1);
				}				
			}
		});
	}
	private void showA() {
		//设置A图片可见
		imgE.setVisibility(View.INVISIBLE);
		imgA.setVisibility(View.VISIBLE);
	}
	private void showE() {
		//设置狗图片可见
		imgA.setVisibility(View.INVISIBLE);
		imgE.setVisibility(View.VISIBLE);
	}
}

效果图:反转前


效果图: 反转后




Android动画(帧动画、补间动画、属性动画)讲解 ** Android动画(帧动画、补间动画、属性动画)讲解 ** 首先我们来看看啥是帧动画、补间动画、属性动画。 介绍: 帧动画:是一种常见的动画形式(Frame By Frame),其原理是在“连续的关键帧”中分解动画动作,也就是在时间轴的每帧上逐帧绘制不同的内容,使其连续播放而成动画。 补间动画:指的是做FLASH动画时,在两个关键帧中间需要做“补间动画”,才能实现图画的运动; 属性动画:帧动画与补间动画实现了对View进行移动、缩放、旋转和淡入淡出的效果。但对于android开发师来说是不够的,同 阅读详情

相关推荐

全面掌握Android动画开发

自定义动画在Android开发中是一个强大的工具,它允许开发者构建既美观又具有交互性的动画效果,为应用带来独特的用户体验。理解自定义动画的工作原理,可以帮助开发者更好地掌握动画的实现方法。是定义动画中属性值变化的关键。通过自定义估值函数,开发者可以精确控制动画过程中属性值如何计算。这在自定义复杂的动画效果时非常有用。// 根据fraction计算并返回一个interpolated value。

weixin_34456923的博客 760

补间动画和属性动画的用法

package com.yztc.tweenanimation;import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.animation.AlphaAnimation; import android.view.animation.Animatio

Cyq_0927的博客 477

Android菜单动画设计与实现

本文还有配套的精品资源,点击获取 简介:在Android开发中,动画是增强用户体验的关键手段。本文将讨论如何在Android中为菜单项实现动画效果,包括补间动画、属性动画、菜单动画的实现、XML定义动画、动画组合与监听,以及触摸反馈动画。通过这些动画的实现,开发者可以创造吸引人的菜单动画,提升应用的交互性和视觉体验。 1. Android动画基础介绍 动画在...

weixin_36212459的博客 520

Android开发之Tween(补间动画)完全解析(下)——代码实现

在上一篇文章中,我们详细讨论了Tween动画的xml的实现以及interpolator的使用,相信通过上篇文章大家对Tween动画的xml属性的配置会有一个详细的理解,当然这篇文章也是承接上篇文章,这篇文章将从代码的角度实现上篇文章的效果。

乐于分享,乐于讨论,欢迎大家积极讨论 3520

Android视图双面翻转动画的实现

在项目的res/anim目录下创建一个XML文件。在该XML文件中定义所需的动画类型和参数。在代码中通过方法加载动画资源。将动画设置给需要动画效果的视图对象。下面是一个简单的XML定义补间动画的例子:<alpha</set>

weixin_42376614的博客 824

LIO-SAM运行报错‘process has died’?别慌,一个命令搞定libmetis.so库路径问题

本文详细解析了LIO-SAM运行中常见的‘process has died’报错问题,特别是由libmetis.so库路径错误导致的节点崩溃。通过一个简单的命令移动库文件到正确位置,即可快速解决这一问题,同时提供了多种替代方案和预防措施,帮助开发者更好地理解Linux动态库加载机制和ROS环境管理。

weixin_29231221的博客 205

安卓开发基础之动画(一)补间动画的各种效果的实现

安卓开发过程中,动画会经常遇到,虽然有时候已经被封装好(如各种开源框架),不需要我们再去处理,但学好动画也是非常重要的,有助于我们实现各种效果,使体验更加友好。安卓动画部分分为:补间动画,帧动画和属性动画,我们也将分三篇来学习,这是第一篇的学习:补间动画的各种效果的实现。不多说了,直接上代码!!! 这里是布局文件,说明一下,补间动画,帧动画和属性动画在一个项目里,所以最下面有三个按钮,进行页面切

萧长笛的博客 736

InsightFace(RetinaFace + ArcFace)人脸识别实战:从模型部署到Web服务构建

本文详细介绍了如何利用InsightFace框架,结合其集成的RetinaFace人脸检测与ArcFace人脸识别预训练模型,从零开始构建一个高性能的Web人脸识别服务。内容涵盖环境搭建、模型部署、核心代码解析(包括五点仿射对齐关键步骤)、FAISS向量检索集成以及基于FastAPI的Web服务开发,并提供了实战优化与常见问题排查指南,帮助开发者快速实现工业级应用。

weixin_29054245的博客 225

Android APK开发基础——-补间动画、帧动画和属性动画

Android中的动画有三种,分别是补间动画、帧动画、属性动画。 Frame Animation(帧动画)主要用于播放一帧帧准备好的图片,类似GIF图片,优点是使用简单方便、缺点是需要事先准备好每一帧图片; Tween Animation(补间动画)仅需定义开始与结束的关键帧,而变化的中间帧由系统补上,优点是不用准备每一帧,缺点是只改变了对象绘制,而没有改变View本身属性。因此如果改变了按钮...

haobobo710的博客 302

数字设计实验:自动售货机

本文旨在介绍数字设计实验:自动售货机的设计思路和实现代码

2401_83740084的博客 2227

PSO算法介绍

结合网上的文章对PSO进行一些介绍,并附上自己复现的算法。

Witty_Hou的博客 1万+

Android 动画框架

Android 好用的框架与UI效果demo收集 1.炫酷开屏动画框架 githubhttps://github.com/JoshuaRogue/FancyView 2.Animate 一个教你基础动画实现的dome githubhttps://github.com/hitherejoe/animate 3.awesome-animation 一个不定期更新各类Android ...

唐衡三 2877

Arduino安装图文教程:小白也能轻松上手

手把手带你完成Arduino安装全过程,无论你是编程新手还是硬件小白,都能快速搭建开发环境。结合arduino安装教程与实操步骤,避开常见错误,让创作即刻启程。

weixin_35509395的博客 1106

Android动画--逐帧动画和补间动画简单介绍和基本用法(一)

转载请标明出处: http://blog.youkuaiyun.com/android_it/article/details/51133030 本文出自:【冯帅的优快云博客】 Android系统给我们提供了两种实现动画效果的方式,逐帧动画(frame-by-frame animation)和补间动画(tweened animation)。逐帧动画的工作原理很简单,其实就是将一个完整的动画拆分成一张

5988

深入解析ADC采样电容:从充电误差到LSB精度的关键设计

本文深入解析了ADC采样电容在模数转换中的核心作用,重点探讨了充电时间常数与采样误差的博弈关系。通过推导最小采样时间公式,揭示了精度、速度、源阻抗与内部电容之间的制约关系,并提供了从理论计算到外部驱动电路设计的实战指南,是确保ADC达到LSB精度的关键。

android的专栏 1103

华为OD机试新系统真题 【查找最佳充电策略】

华为OD机试 新系统真题【查找最佳充电策略】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【查找最佳充电策略】多语言题解。

qq_45776114的博客 430

android移动开发基础课后答案,《ANDROID移动应用开发基础》见面课及答案

《《ANDROID移动应用开发基础》见面课及答案》由会员分享,可在线阅读,更多相关《《ANDROID移动应用开发基础》见面课及答案(7页珍藏版)》请在装配图网上搜索。1、ANDROID移动应用开发基础见面课及答案见面课:Android中资源的应用1、 下列选项中,属于定义字符串资源使用的标签的是( )。A.B.C.D.demin正确答案:2、在Activity的onCreate()方法中,加载布局...

weixin_42360953的博客 2164

【第13话:感知算法】库位与可行驶区域检测:自主泊车场景中的检测及语义分割方法

本文提出了一种自动泊车系统中的泊车库位线检测方法,通过逆透视映射(IPM)将车辆摄像头图像转换为鸟瞰视图,消除透视变形。该方法结合目标检测和语义分割模型,先定位库位线候选区域,再生成像素级精确掩码。后处理步骤将掩码转换为结构化输出,包括停车位边界多边形和可行驶区域掩码。整个流程采用深度学习模型和计算机视觉技术,可实现高精度的泊车环境感知,为自动泊车系统提供可靠支持。

一碗白开水一 1160

Android 安卓动画 补间动画 - 平移动画

补间动画-平移动画:补间动画-缩放动画:补间动画-旋转动画:补间动画-透明/渐变动画:补间动画-组合动画(四个动画一起播放):属性动画-渐变透明动画:属性动画-旋转动画:属性动画-缩放动画:属性动画-移动动画:属性动画-组合动画:效果图 篇操作步骤在res下创建anim文件夹,右击res文件夹,按下图操作创建找到anim点击OK,此时就创建好了在这个文件夹(anim)下新建xml文件,右击anim文件夹按下图操作创建在这个xml文件中写入属性,属性详细见下列表格解释:布局文件 篇。

2401_84010402的博客 1298

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Android动画全篇系列(零)——动画总览

前言 当初之所以搞前端,谁不是被哪些炫酷的画面吸引呢? 想要成为一个niubility的Android程序员,不仅要熟悉各种框架和架构,对于细节上,自定义View和动画也是不可或缺的! 为此,我就新开一个篇章,专门针对Android的动画,预想是对Android所有的动画进行一个比较深入的了解,希望能够一直更下去。 动画种类 现在你随便百度一下Android的动画种类,那么答案大部分都是:3种...

catzifeng的博客 592

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

从零开始学习自定义view【4】探索并实践Android中的自定义View动画(视图动画、属性动画、Drawable动画、过渡动画):简单而精彩

视图动画主要用于修改视图的外观,包括透明度、平移、缩放和旋转等属性。通过视图动画,可以为应用中的各种视图元素添加生动的效果。例如,当用户点击按钮时,可以使用缩放动画来实现按钮的放大效果,增加交互的反馈感。属性动画是一种更为灵活的动画类型,可应用于任何对象,不仅限于视图。通过属性动画,可以平滑地过渡对象的各种属性值。这使得我们开发人员可以创建更加流畅和自定义的动画效果。例如,可以使用属性动画实现一个平滑的颜色过渡效果,让界面元素在不同状态之间平滑过渡。

jiet_h的博客 906

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android自定义view和动画

3.自定义view项目。

zhangshuaizs88的博客 136

《Android开发进阶:从小工到专家》——第2章,第2.5节小结

本节书摘来自异步社区《Android开发进阶:从小工到专家》一书中的第2章,第2.5节小结,作者 何红辉,更多章节内容可以访问云栖社区“异步社区”公众号查看 2.5 小结本章学习了Android开发中最为重要的两个知识点,即自定义View与动画。通过自定义View,可以创造出丰富多彩的UI元素,但是由于篇幅有限,一些很重要的知识点并没有覆盖,例如Xfer...

weixin_34248849的博客 103

Android 动画知识点

工程中经常要用到动画来增加视觉效果,把动画方面的知识点整理一下,方便开发。 首先,来看这两篇介绍 帧动画与补间动画的文章,非常不错: ① 详解Android动画之Frame Animation ② 详解Android动画之Tween Animation 还有一篇是自己以前记录的,写得不好但是自己写的印象深刻: ③ Selector、动画之xml

ymangu的专栏 738

Android补间动画

概述 本篇读书笔记基于《Android开发艺术探索》,将会介绍以下三种动画: View 动画 帧动画 属性动画 一、View动画 首先,我们要知道View动画作用的对象是View,它支持平移、缩放、旋转和透明度四种变换效果,它们的具体描述如下表所示: 名称 标签 子类 效果 平移动画 <translate> TranslateAnimation 移动View 缩...

Marck的博客 3715
上一篇: Android开发之基础新特性-------------Fragment&帧动画(一知识点)
下一篇: android开发基础之---------------自定义控件的使用
杨鑫校
博客等级 码龄11年 24粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值