前言、动画分类

例如以下图所看到的,Android的动画主要分为三种:

以下首先说说
属性动画

所谓属性动画——
就是指对象的属性值发生了变化,如控件位置和透明度等。

举例,如今要实现一个按键先下移。再右移的动画。

1)编写动画xml

由于新建androidproject的时候,在res以下并没有专门放置动画xml的目录。因此,我们新建一个animator名称的目录。建议不要起别的名字,由于ADT对res的目录命名有检索功能,如起animator这个名字的时候。ADT就能依据名称识别出这个是动画xml目录,在你新建xml的时候。会给对应的根元素选择。

例如以下图所看到的:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGluZmVuZzI0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

动画XML的代码例如以下——

<?xml version="1.0" encoding="utf-8"?

>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="sequentially" >
<objectAnimator
android:duration="2000"
android:propertyName="y"
android:valueTo="500"
android:valueType="intType"></objectAnimator>
<objectAnimator
android:duration="2000"
android:propertyName="a"
android:valueTo="300"
android:valueType="intType"></objectAnimator>
</set>

对动画xml的说明例如以下:

  • android:ordering说明一系列动画动作的运行顺序,有两个选择。sequentially
    和together,顺序运行还是一起运行;
  • objectAnimator
    是设定动画实施的对象,duration是该动画动作运行从開始到结束所用的时间,属性是y(后面在Activity会讲到,这是自定义的属性,用来指button的在屏幕中的y坐标值。),属性值是500,类型是整型。

2Activity代码

public class PropertyActivity extends Activity {

	public final static String TAG = "PropertyActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_property); final Button moveButton = (Button)findViewById(R.id.move_btn);
final Move move = new Move(moveButton);
moveButton.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// 装载属性动画资源
AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(PropertyActivity.this,
R.animator.property_anim);
// 设置要控制的对象
set.setTarget(move);
// 開始动画
set.start();
Log.d(TAG, "getWidth:"+moveButton.getWidth());
Log.d(TAG, "Top:"+moveButton.getTop());
Log.d(TAG, "getMeasuredWidth:"+moveButton.getMeasuredWidth());
Log.d(TAG, "getBottom:"+moveButton.getBottom());
}
}); } private class Move{
private int a;
private int y;
private View view;
public Move(View view) {
this.view = view;
} public int getY()
{
return y;
} public void setY(int y)
{
this.y = y;
view.layout(view.getLeft(), y, view.getRight(),
y + view.getMeasuredHeight());
} public int getA()
{
return a;
} public void setA(int a)
{
this.a = a; Log.d(TAG, "End_getWidth:"+view.getWidth());
Log.d(TAG, "End_Top:"+view.getTop());
Log.d(TAG, "End_getMeasuredWidth:"+view.getMeasuredWidth());
Log.d(TAG, "End_getBottom:"+view.getBottom());
view.layout(a, view.getTop(), a + view.getMeasuredWidth(),
view.getBottom());
}
} }

我们在程序中Logcat打印出对button位置的详细值。

Log.d(TAG,"getWidth:"+moveButton.getWidth());

Log.d(TAG,"Top:"+moveButton.getTop());

Log.d(TAG,"getMeasuredWidth:"+moveButton.getMeasuredWidth());

Log.d(TAG,"getBottom:"+moveButton.getBottom());

结果例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGluZmVuZzI0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

上下高度确实是从0变化到500,实现了移动。

上面代码中的属性x,y都是自己随意取的变量值,在set方法中设置了详细view的高度和宽度,因此,变量名称是什么不重要,仅仅要xml与这里java代码相符合即可。

get()方法没必要的,而set方法是必须的,由于

AnimatorSet动画设定类中就须要调用对象的属性设定方法。通过动画来改变对应属性。

以上仅仅是简单地演示了属性动画,实际上这个是从Android 3.0后才出来的。3.0之前有一个非常著名的动画开源项目,名字叫做 Nine Old Androids ,该项目开发了非常多属性动画, 例如以下图所看到的,不好意思,不会做gif动态图。大家能够直接在博文后面的链接下。里面有APK和源码。值得一读。









Android笔记之属性动画的更多相关文章

  1. Android(java)学习笔记264:Android下的属性动画高级用法(Property Animation)

    1. 大家好,在上一篇文章当中,我们学习了Android属性动画的基本用法,当然也是最常用的一些用法,这些用法足以覆盖我们平时大多情况下的动画需求了.但是,正如上篇文章当中所说到的,属性动画对补间动画 ...

  2. Android(java)学习笔记263:Android下的属性动画(Property Animation)

    1. 属性动画(Property Animation)引入: 在手机上去实现一些动画效果算是件比较炫酷的事情,因此Android系统在一开始的时候就给我们提供了两种实现动画效果的方式,逐帧动画(fra ...

  3. Android(java)学习笔记208:Android下的属性动画高级用法(Property Animation)

    1. 大家好,在上一篇文章当中,我们学习了Android属性动画的基本用法,当然也是最常用的一些用法,这些用法足以覆盖我们平时大多情况下的动画需求了.但是,正如上篇文章当中所说到的,属性动画对补间动画 ...

  4. Android(java)学习笔记207:Android下的属性动画(Property Animation)

    1. 属性动画(Property Animation)引入: 在手机上去实现一些动画效果算是件比较炫酷的事情,因此Android系统在一开始的时候就给我们提供了两种实现动画效果的方式,逐帧动画(fra ...

  5. 【Android】使用属性动画碰到的困惑及讲解

    属性动画的教程网上已经特别多了,本篇也不打算再去各种详解知识点,主要就是记录题主学习属性动画时的碰到的一些困惑,以及后来自己的理解.如果有人也碰到相似的问题,正好可以一起讨论下. 概要 本篇主要涉及的 ...

  6. Android中PropertyAnimation属性动画详解(一)

    在之前的文章中已经讲了帧动画frame-by-frame animation和补间动画tweened animation,其实这两种动画原理好简单,都是按照预先固定的动画模式来播放的,帧动画将一张张单 ...

  7. Android属性动画之第一重修炼总结

    经过这两天对ObjectAnimator属性动画的学习,基本对Android提供的属性动画有了一定的认识,现在就为大家以一个类似扇形打开的效果做总结. 效果图: 下面就让我们用刚刚学到的属性动画效果, ...

  8. Android属性动画之ObjectAnimator

    相信对于Android初学者,对于Android中的动画效果一定很感兴趣,今天为大家总结一下刚刚学到的属性动画案例. 首先和一般的Android应用一样,我们先建一个工程,为了方便,我们的布局文件中就 ...

  9. Android动画主要包含补间动画(Tween)View Animation、帧动画(Frame)Drawable Animation、以及属性动画Property Animation

    程序运行效果图: Android动画主要包含补间动画(Tween)View Animation.帧动画(Frame)Drawable Animation.以及属性动画Property Animatio ...

随机推荐

  1. flask基础之请求钩子(十二)

    前言 什么是请求钩子?在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要统一处理,为了让每个视图函数避免编写重复功能的代码,flask提供了统一的接口可以添加这些处理函数,即请求钩子. 请求钩子 ...

  2. retrying模块的学习

    retrying模块的学习 我们在写爬虫的过程中,经常遇到爬取失败的情况,这个时候我们一般会通过try块去进行重试,但是每次都写那么一堆try块,真的是太麻烦,所以今天就来说一个比较pythonic的 ...

  3. poj1273

    赤裸裸的最大流 #include <iostream> #include <cstdio> #include <cstdlib> #include <cstr ...

  4. 排序算法的JS实现

    排序算法是基础算法,虽然关键在于算法的思想而不是语言,但还是决定借助算法可视化工具结合自己常用的语言实现一下 1.冒泡排序 基本思路:依次比较两两相邻的两个数,前面数比后面数小,不变.前面数比后面数大 ...

  5. SpringMVC JSON数据交互

    本节内容: @RequestBody @ResponseBody 请求json,响应json实现 前端可以有很多语言来写,但是基本上后台都是java开发的,除了c++(开发周期长),PHP和#Net( ...

  6. 【LOJ】#2549. 「JSOI2018」战争

    题解 仔细分析了一下,如果写个凸包+每次暴力半平面交可以得到70分,正解有点懵啊 然后用到了一个非常结论,但是大概出题人觉得江苏神仙一个个都可以手证的结论吧.. Minkowski sum 两个凸包分 ...

  7. div左边固定宽度,右边自适应宽度

    样式: <style type="text/css"> html,body { height: 100%; padding: 0; margin: 0; } .oute ...

  8. 利用 gdb 探究main(int argc, char *argv[]){} 中的char *argv[]

    在 Linux 系统中编写小程序 代码如下 编译并采用gdb调试  在调试之前设置三个参数   a   bb   ccc 输入 start 执行代码到 return 0; 从这里可以看到 argc = ...

  9. Java反射初探 ——“当类也学会照镜子”

    反射的作用 开门见山地说说反射的作用   1.为我们提供了全面的分析类信息的能力 2.动态加载类   我理解的“反射”的意义 (仅个人理解哈)   我理解的java反射机制就是: 提供一套完善而强大的 ...

  10. java 反射获取类的静态属性值

    public class AppTest { private NodeClass nodeClass; public static String hehe = "hehe"; pu ...