1.layout切换动画

代码:

本示例是fragment切换.在它的oncreateView中

public class LayoutAnimationFrgmt extends Fragment {
<span style="white-space:pre"> </span>@Override
<span style="white-space:pre"> </span>public View onCreateView(LayoutInflater inflater, ViewGroup container,
<span style="white-space:pre"> </span>Bundle savedInstanceState) {
<span style="white-space:pre"> </span>super.onCreateView(inflater, container, savedInstanceState);
<span style="white-space:pre"> </span>// TODO Auto-generated method stub
<span style="white-space:pre"> </span>RelativeLayout rl = (RelativeLayout) inflater.inflate(R.layout.fragment_layout_animation, container,
<span style="white-space:pre"> </span>false);
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>ScaleAnimation sa = new ScaleAnimation(0,1,0,1);
<span style="white-space:pre"> </span>sa.setDuration(350);
<span style="white-space:pre"> </span>LayoutAnimationController lac = new LayoutAnimationController(sa,0.5f);//0.5f是第后续控件的间隔 
<span style="white-space:pre"> </span>lac.setOrder(LayoutAnimationController.ORDER_REVERSE);//设置动画方向,ORDER_REVERSE是反向
<span style="white-space:pre"> </span>rl.setLayoutAnimation(lac); <span style="white-space:pre"> </span>return rl;
<span style="white-space:pre"> </span>}
}

2.layout内容变化时的动画

2.1 在相应的layout的xml里 android:animateLayoutChanges="true"
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/fragment_layout_changed_animation"
<span style="color:#ff0000;">android:animateLayoutChanges="true"</span>>
<TextView
android:id="@+id/flatv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:text="@string/add_button" />
</RelativeLayout>

2.2 自定义layoutChanged动画

public class LayoutChangedAnimationFrgmt extends Fragment implements OnClickListener {
private RelativeLayout rl;
private TextView tv;
LayoutTransition mTransition;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreateView(inflater, container, savedInstanceState);
rl = (RelativeLayout) inflater.inflate(R.layout.fragment_layout_changed_animation, container,false);
mTransition = new LayoutTransition();
rl.setLayoutTransition(mTransition);
<span style="color:#ff0000;">setupCustomAnimations</span>();//初始化动画
tv = (TextView) rl.findViewById(R.id.flatv);
return rl;
}
// LayoutTransition 生成自定义动画
private void <span style="color:#ff0000;">setupCustomAnimations</span>() {
// 动画:CHANGE_APPEARING
// Changing while Adding
PropertyValuesHolder pvhLeft = PropertyValuesHolder.ofInt("left", 0, 1);
PropertyValuesHolder pvhTop = PropertyValuesHolder.ofInt("top", 0, 1);
PropertyValuesHolder pvhRight = PropertyValuesHolder.ofInt("right", 0,
1);
PropertyValuesHolder pvhBottom = PropertyValuesHolder.ofInt("bottom",
0, 1);
PropertyValuesHolder pvhScaleX = PropertyValuesHolder.ofFloat("scaleX",
1f, 0f, 1f);
PropertyValuesHolder pvhScaleY = PropertyValuesHolder.ofFloat("scaleY",
1f, 0f, 1f); final ObjectAnimator changeIn = ObjectAnimator.ofPropertyValuesHolder(
this, pvhLeft, pvhTop, pvhRight, pvhBottom, pvhScaleX,
pvhScaleY).setDuration(
mTransition.getDuration(LayoutTransition.CHANGE_APPEARING));
mTransition.setAnimator(LayoutTransition.CHANGE_APPEARING, changeIn);
changeIn.addListener(new AnimatorListenerAdapter() {
public void onAnimationEnd(Animator anim) {
View view = (View) ((ObjectAnimator) anim).getTarget();
// View也支持此种动画执行方式了
view.setScaleX(1f);
view.setScaleY(1f);
}
}); // 动画:CHANGE_DISAPPEARING
// Changing while Removing
Keyframe kf0 = Keyframe.ofFloat(0f, 0f);
Keyframe kf1 = Keyframe.ofFloat(.9999f, 360f);
Keyframe kf2 = Keyframe.ofFloat(1f, 0f);
PropertyValuesHolder pvhRotation = PropertyValuesHolder.ofKeyframe(
"rotation", kf0, kf1, kf2);
final ObjectAnimator changeOut = ObjectAnimator
.ofPropertyValuesHolder(this, pvhLeft, pvhTop, pvhRight,
pvhBottom, pvhRotation)
.setDuration(
mTransition
.getDuration(LayoutTransition.CHANGE_DISAPPEARING));
mTransition
.setAnimator(LayoutTransition.CHANGE_DISAPPEARING, changeOut);
changeOut.addListener(new AnimatorListenerAdapter() {
public void onAnimationEnd(Animator anim) {
View view = (View) ((ObjectAnimator) anim).getTarget();
view.setRotation(0f);
}
}); // 动画:APPEARING
// Adding
ObjectAnimator animIn = ObjectAnimator.ofFloat(null, "rotationY", 90f,
0f).setDuration(
mTransition.getDuration(LayoutTransition.APPEARING));
mTransition.setAnimator(LayoutTransition.APPEARING, animIn);
animIn.addListener(new AnimatorListenerAdapter() {
public void onAnimationEnd(Animator anim) {
View view = (View) ((ObjectAnimator) anim).getTarget();
view.setRotationY(0f);
}
}); // 动画:DISAPPEARING
// Removing
ObjectAnimator animOut = ObjectAnimator.ofFloat(null, "rotationX", 0f,
90f).setDuration(
mTransition.getDuration(LayoutTransition.DISAPPEARING));
mTransition.setAnimator(LayoutTransition.DISAPPEARING, animOut);
animOut.addListener(new AnimatorListenerAdapter() {
public void onAnimationEnd(Animator anim) {
View view = (View) ((ObjectAnimator) anim).getTarget();
view.setRotationX(0f);
}
}); }//其它方法略...
}


3.ListViewLayout的动画(用代码和xml配置两个方法实现)

3.1 代码实现
public class LayoutAnimInListViewCodeAty extends ListActivity {
private ArrayAdapter<String> adapter;
private String [] datas;
private LayoutAnimationController lac;
private TranslateAnimation ta;
private ScaleAnimation sa;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); // setContentView(R.layout.activity_layout_list_view);ListActivity不用它. datas = new String[]{"hei","bai","hooo","lvv","lann"}; adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,datas); setListAdapter(adapter); ta = new TranslateAnimation(0,1,0,1); sa = new ScaleAnimation(0,1,0,1);
sa.setDuration(1000); // lac = new LayoutAnimationController(ta,0.5f);
lac = new LayoutAnimationController(sa,0.5f);
getListView().setLayoutAnimation(lac);
}
<span style="white-space:pre"> </span>//其它略...
}

3.2 xmls配置文件实现

代码部分:
public class LayoutAnimInListViewXmlAty extends ListActivity {
private ArrayAdapter<String> adapter;
private String[] datas; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_layout_anim_in_list_xml_aty);
datas = new String[] { "hei", "bai", "hooo", "lvv", "lann" }; adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, datas); setListAdapter(adapter);
} @Override

aty对应的布局xml: 注意 android:id="@android:id/list" 是必需


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.layoutanimation.LayoutAnimInListViewXmlAty" > <ListView
<span style="font-size:24px;color:#ff0000;">android:id="@android:id/list"</span>
android:layout_width="match_parent"
android:layout_height="match_parent"
<span style="color:#ff0000;">android:layoutAnimation="@anim/listview_anim"</span> >
</ListView>
</RelativeLayout>

layout动画配置文件:listview_anim.xml

<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
android:animation="@anim/scale_xml_anim"
android:delay="0.5" > </layoutAnimation>

具体动画效果配置文件:scale_xml_anim.xml

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:fromXScale="0"
android:fromYScale="0"
android:toXScale="1"
android:toYScale="1" > </scale>







android动画(3)layout动画,layoutChanged动画及算定义它,ListViewActivity的Layout动画(代码和xm配置两种实现l)的更多相关文章

  1. Android中BroadcastReceiver的两种注册方式(静态和动态)详解

    今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来 ...

  2. android中的OnClickListener两种实现方式

    android的activity点击事件中,通过OnClickListener来实现,要实现点击事件有两种方式 1.通过定义一个OnClickListener的内部类来实现 The example b ...

  3. Android仿腾讯手机管家实现桌面悬浮窗小火箭发射的动画效果

    功能分析: 1.小火箭游离在activity之外,不依附于任何activity,不管activity是否开启,不影响小火箭的代码逻辑,所以小火箭的代码逻辑是要写在服务中: 2.小火箭挂载在手机窗体之上 ...

  4. Android动画之仿美团加载数据等待时,小人奔跑进度动画对话框(附顺丰快递员奔跑效果)

    Android动画之仿美团加载数据等待时,小人奔跑进度动画对话框(附顺丰快递员奔跑效果) 首句依然是那句老话,你懂得! finddreams :(http://blog.csdn.net/finddr ...

  5. android位移动画的两种实现方式

    在android开发,我们会常常使用到位移动画,普通情况下位移动画有两种实现方式.一种是直接通过java代码去实现,第二种是通过配置文件实现动画,以下是两种动画的基本是用法: 纯Java代码实现: / ...

  6. android旋转动画的两种实现方式

    在android开发,我们会常常使用到旋转动画,普通情况下旋转动画有两种实现方式,一种是直接通过java代码去实现,第二种是通过配置文件实现动画.以下是两种动画的基本是用法: 纯Java代码实现: / ...

  7. Android系统移植与调试之------->如何修改开机动画的两种方式剖析

    首先,我们先来分析一下源码: frameworks/base/cmds/bootanimation/BootAnimation.cpp 首先看一下定义的常量: BootAnimation::ready ...

  8. android动画(1)各种动画属性表,简单代码,xml配置

    1.动画的属性表 1.1 常用属性 它们可以通过代码setXXX,getXXX,也可在xml中配置. 属性[类型] 功能 备注 Duration[long] 属性为动画持续时间 时间以毫秒为单位 fi ...

  9. android缩放动画的两种实现方法

    在android开发.我们会常常使用到缩放动画,普通情况下缩放动画有两种实现方式.一种是直接通过java代码去实现,第二种是通过配置文件实现动画,以下是两种动画的基本是用法: Java代码实现: // ...

随机推荐

  1. HDOJ 5045 Contest

    状压DP.. . . Contest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  2. ios 关于动画用法的总结

      #import "FirstVC.h" @implementation FirstVC /*     创建xib过程     1 创建xib(名字和类名相同)     2 文件 ...

  3. 解决ubuntu10.04不能上网

    1:命令行输入:lspci查看驱动,最后几行如果有ethernet controller:atheros communications ar8151 v1.0*的话,就说明驱动没有安装好, 2:下载地 ...

  4. HDU3555 Bomb —— 数位DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3555 Bomb Time Limit: 2000/1000 MS (Java/Others)    M ...

  5. SpringMVC配置环境中一般用的jar包

    配置SpringMVC需要把这些jar包加入lib目录下 下载地址,复制到地址栏.回车即可下载 http://files.cnblogs.com/files/QW-lzm/SpringMVC----. ...

  6. hdu 4463 Outlets(最小生成树)

    题意:n个点修路,要求总长度最小,但是有两个点p.q必须相连 思路:完全图,prim算法的效率取决于节点数,适用于稠密图.用prim求解. p.q间距离设为0即可,最后输出时加上p.q间的距离 pri ...

  7. RPi 2B DDNS 动态域名

    /**************************************************************************** * RPi 2B DDNS 动态域名 * 说 ...

  8. I.MX6 不一定要设置BOOT_MODE进入烧录模式

    /************************************************************************* * I.MX6 不一定要设置BOOT_MODE进入 ...

  9. SPOJ:Collecting Candies(不错的DP)

    Jonathan Irvin Gunawan is a very handsome living person. You have to admit it to live in this world. ...

  10. 【USACO 2006 November Gold】Corn Fields

    [题目链接] 点击打开链接 [算法] 状压DP [代码] #include<bits/stdc++.h> using namespace std; #define MAXN 12 #def ...