首页 > 编程语言 >android开发之动画的详解 整理资料 Android开发程序小冰整理

android开发之动画的详解 整理资料 Android开发程序小冰整理

时间:2022-12-11 22:32:02浏览次数:43  
标签:动画 Animation 整理 imageView android main animation 小冰

(一)、概要:

       3.0以前,android支持两种动画模式,补间动画(tween animation),帧动画(frame animation),在android3.0中又引入了一个新的动画系统:属性动画(property animation)。

       这三种动画模式在SDK中被称为view animation,drawable animation,property animation。


(二)、动画资源分类:

属性动画:Property Animation

帧动画:Frame Animation (Drawable Animation)

补间动画:Tween Animation (View Animation)

透明度补间动画

缩放补间动画

旋转补间动画

移动补间动画


二、补间动画:

       View Animation就是一系列View形状的变换,如大小的缩放、透明度的改变、位置的改变、旋转位置改变,动画的定义既可以用java代码定义也可以用XML定义。建议用XML定义。

       用XML定义的动画放在 /res/anim/文件夹内,XML文件的根元素为<set> , 二级节点可为< alpha>,< scale>,< translate>,< rotate>。

(一)、用xml资源实现补间动画:


(二)、用java代码实现补间动画:

public class MainActivity extends Activity {

private ImageView imageView_main;

private Animation animation = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView_main = (ImageView) findViewById(R.id.imageView_main);
}


public void clickButton(View view) {
switch (view.getId()) {
case R.id.button_main_alpha:
animation = new AlphaAnimation(0.0f, 1.0f);
break;
case R.id.button_main_scale:
animation = new ScaleAnimation(0.0f, 1.0f, 0.0f, 1.0f,
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 1.0f);
break;
case R.id.button_main_translate:
animation = new TranslateAnimation(0, 150, 0, 0);
break;
case R.id.button_main_rotate:
animation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 1.0f);
break;
default:
break;
}
animation.setDuration(3000);
imageView_main.setAnimation(animation);
}
}



三、帧动画:

       Frame Animation(AnimationDrawable对象):帧动画,就像GIF图片,通过一系列Drawable依次显示来模拟动画的效果。

       必须以<animation-list>为根元素,以<item>表示要轮换显示的图片,duration属性表示各项显示的时间。XML文件要放在 /res/anim/或者/ res/animator或者 /res/drawable目录下。

(一)、实例代码:

一、res/anim/frame_animation.xml的代码:


<animation-listxmlns:android="http://schemas.android.com/apk/res/android"

android:oneshot="true">

<itemandroid:drawable="@drawable/anim1"android:duration="50"/>

<itemandroid:drawable="@drawable/anim2"android:duration="50"/>

<itemandroid:drawable="@drawable/anim3"android:duration="50"/>

<itemandroid:drawable="@drawable/anim4"android:duration="50"/>

<itemandroid:drawable="@drawable/anim5"android:duration="50"/>

<itemandroid:drawable="@drawable/anim6"android:duration="50"/>

<itemandroid:drawable="@drawable/anim7"android:duration="50"/>

<itemandroid:drawable="@drawable/anim8"android:duration="50"/>

<itemandroid:drawable="@drawable/anim9"android:duration="50"/>

<itemandroid:drawable="@drawable/anim10"android:duration="50"/>

<itemandroid:drawable="@drawable/anim11"android:duration="50"/>

<itemandroid:drawable="@drawable/anim12"android:duration="50"/>

</animation-list>



二、MainActivity.java代码:

public class MainActivity extends Activity {
private ImageView imageView_main_show;

private AnimationDrawable animationDrawable = null;


@Override

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);


imageView_main_show = (ImageView) findViewById(R.id.imageView_main_show);

imageView_main_show.setBackgroundResource(R.anim.frame_animation);

animationDrawable = (AnimationDrawable) imageView_main_show.getBackground();

}


public void clickButton(View view) {
switch (view.getId()) {
case R.id.button_main_start:

if (!animationDrawable.isRunning()) {
//一组动画是否只播放一次

animationDrawable.setOneShot(false);

animationDrawable.start();

}

break;

case R.id.button_main_stop:

if (animationDrawable.isRunning()) {
animationDrawable.stop();

}

break;

}

}


@Override

public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);

if (!animationDrawable.isRunning()) {
animationDrawable.setOneShot(false);

animationDrawable.start();

}

}

}



【备注:】

       SDK中提到,不要在onCreate()中调用start(),因为AnimationDrawable还没有完全跟Window相关联,如果想要界面显示时就开始动画的话,可以在 onWindowFoucsChanged()中调用 start()。



四、属性动画:

(一)、概念:

       属性动画,这个是在Android 3.0中才引进的。Property Animation故名思议就是通过动画的方式改变对象的属性.属性动画更改的是对象的实际属性,在View Animation(Tween Animation)中,其改变的是 View的绘制效果,真正的View的属性保持不变。

       比如无论如何缩放Button的大小,Button的有效点击区域还是没有应用动画时的区域,其位置与大小都不变。而在Property Animation中,改变的是对象的实际属性,如Button的缩放,Button的位置与大小属性值都改变了。

       Property Animation不止可以应用于View,还可以应用于任何对象。Property Animation只是表示一个值在一段时间内的改变,当值改变时要做什么事情完全是你自己决定的。


(二)、常用属性:

Duration动画的持续时间,默认300ms。

Time interpolation:时间插值。LinearInterpolator、AccelerateDecelerateInterpolator,定义动画的变化率。

Repeat count and behavior:重复次数、以及重复模式;可以定义重复多少次;重复时从头开始,还是反向。

Animator sets: 动画集合,你可以定义一组动画,一起执行或者顺序执行。

Frame refresh delay:帧刷新延迟,对于你的动画,多久刷新一次帧;默认为10ms,但最终依赖系统的当前状态;基本不用管。

(三)、相关的类:

ObjectAnimator 动画的执行类(常用属性:alpha,rotation,rotationX,rotationY,translationX,translationY,scaleX,scaleY)

ValueAnimator 动画的执行类

AnimatorSet 用于控制一组动画的执行:线性,一起,每个动画的先后执行等。

AnimatorInflater 用户加载属性动画的xml文件

TypeEvaluator 类型估值,主要用于设置动画操作属性的值。

TimeInterpolator 时间插值

总的来说,属性动画就是,动画的执行类来设置动画操作的对象的属性、持续时间,开始和结束的属性值,时间差值等,然后系统会根据设置的参数动态的变化对象的属性。


(一)、实例代码:

一、res/anim/property_anim.xml的代码:



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

android:ordering="sequentially">

<objectAnimator

android:duration="4000"

android:propertyName="x"

android:valueTo="300"

android:valueType="intType"/>

<objectAnimator

android:duration="4000"

android:propertyName="y"

android:valueTo="400"

android:valueType="intType"/>



<objectAnimator

android:duration="4000"

android:propertyName="x"

android:valueTo="0"

android:valueType="intType"/>

<objectAnimator

android:duration="4000"

android:propertyName="y"

android:valueTo="0"

android:valueType="intType"/>

</set>



二、MainActivity.java代码:
public class MainActivity extends Activity {

private ImageView imageView_main_obj;

private Move move;


@Override

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

imageView_main_obj = (ImageView) findViewById(R.id.imageView_main_obj);

move = new Move();


imageView_main_obj.setOnClickListener(new OnClickListener() {
@Override

public void onClick(View v) {
setTitle(move.getX() + ":" + move.getY());

}

});

}


class Move {
private int y;

private int x;


publicint getY() {
return y;

}


public void setY(int y) {
this.y = y;

imageView_main_obj.layout(imageView_main_obj.getLeft(), y,imageView_main_obj.getRight(),y + imageView_main_obj.getMeasuredHeight());

}

public int getX() {
return x;

}


publi cvoid setX(int x) {
this.x = x;

imageView_main_obj.layout(x, imageView_main_obj.getTop(), x + imageView_main_obj.getMeasuredWidth(),imageView_main_obj.getBottom());

}

}


public void clickButton(View view) {
// 装载属性动画资源

AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(this,

R.animator.property_anim);

// 设置要控制的对象

set.setTarget(move);

// 开始动画

set.start();

}

}


【备注说明:】

<objectAnimator

android:duration="4000"

android:propertyName="x"

android:valueTo="300"

android:valueType="intType"/>

【备注:】

android:ordering说明一系列动画动作的执行顺序,有两个选择: sequentially 和together,顺序执行还是一起执行;

objectAnimator 是设定动画实施的对象;

duration是该动画动作执行从开始到结束所用的时间;

android:repeatCount="infinite"   可以是整数或者infinite

android:repeatMode="restart"    可以是restart 或者 reverse

android:valueFrom=" "     整数|浮点数|颜色

/** * 作者:David Zheng on 2015/11/7 15:38 * *



标签:动画,Animation,整理,imageView,android,main,animation,小冰
From: https://blog.51cto.com/mcxiaobing/5928806

相关文章

  • 屏幕适配 部分知识点总结,CSDN小冰原创
    /***作者:DavidZhengon2015/11/715:38** 屏幕适配简介(了解)Android的屏幕有大有小,为了对不同大小屏幕的设备提供最好的体验,需要对不同大小的设备进行不同的设计......
  • 最全面系统的Zabbix讲解 _ 含源码&监控类型整理
    从本篇内容你能得到:1.Zabbix是什么、能做到什么2.Zabbix组件详解、架构和处理工作流程3.Zabbix各监控项类型的采集实现(SNMP、ICMP、Ping、简单检查等)4.Zabbix模板......
  • Android SDK 环境变量配置
    配置​​Android​​ SDK环境变量主要是为Android命令行工具提供方便,可以直接在终端使用部分shell命令。AndroidSDK附带了一系列命令行工具,位于AndroidSDK安装目录的......
  • 统计计算整理总结
    统计计算就快要结课了!!这学期一共涉及了一下知识点:Simulation随机数生成MCHypothesisTesting(parametric)假设检验RegressionAnalysis线性模型AnalysisofVari......
  • Windows搭建react-native(RN)环境,RN版本0.55,jdk8,node12.2.0,Android Studio
    Windows搭建react-native(RN)环境,RN版本0.55,jdk8,node12.2.0,AndroidStudio七月星辰已于 2022-09-2609:20:38 修改1319收藏6分类专栏:AndroidStud......
  • androidX jetifier - 有没有办法忽略jetifying .JAR?
    androidXjetifier-有没有办法忽略jetifying.JAR?Mar*_*ann  9 android androidx android-jetifier 尝试将我的应用程序更新为androidX依赖项。按照此处的说......
  • Android studio 配置
    字体颜色文件等设置:Settings->EditorGit等版本控制设置:Settings->VersionControl快捷键设置:Settings->Keymap语言等设置:Settings->Language&Frameworksgradl......
  • Android手机应用开发之手机GPS定位
    最近在做Android手机应用开发,还是很有意思的。其实如果只是做简单手机应用开发而不是手机游戏开发的话,还是很简单的。把主要的控件掌握了,就可以开发简单的应用了。下面主要......
  • android 原生和ReactApplication的交互
      ReactNative创建工程,是通过在命令终端输入​​react-nativeinit你的项目名字​​来创建工程的,创建的工程会从网络端,同步到你终端所在路径的本地,生成一个和androi......
  • 拓端数据tecdat|R语言代写dplyr-高效的数据变换与整理工具
    1、背景简介在数据分析工作中,经常需要对原始的数据集进行清洗、整理以及变换。常用的数据整理与变换工作主要包括:特定分析变量的选取、满足条件的数据记录的筛选、按某一......