Android 动画总结-Layout动画

layoutAnimation可以作用于ViewGroup

Android提供了:
android:animateLayoutChanges
android:layoutAnimation 属性

如: 给LinearLayout增加, 移除子View的时候添加动画

直接加上android:animateLayoutChanges=”true”就可以拥有布局改变时的动画

<LinearLayout
    android:id="@+id/ll_container"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:animateLayoutChanges="true"
    android:orientation="vertical" />

这里写图片描述

另一种方法是指定android:layoutAnimation=”@anim/anim*”

如: 给ListView指定滑入动画

<ListView
     android:id="@+id/listView"
     android:layout_width="match_parent"
     android:layout_height="0dp"
     android:layout_weight="1"
     android:layoutAnimation="@anim/anim_list_slide_right" />

anim_list_slide_right.xml

<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
    android:animation="@anim/anim_slide_right"
    android:animationOrder="normal"
    android:delay="20%" />

    <!--
    android:delay表示动画播放的延时,既可以是百分比,也可以是float小数。单位: 秒
    android:animationOrder表示动画的播放顺序,有三个取值normal(顺序)、reverse(反序)、random(随机)。
    android:animation指向了子控件所要播放的动画。-->

anim_slide_right.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="300"
    android:fromXDelta="100%p"
    android:toXDelta="0" />

当然, 还可以在java代码中指定:

//通过加载XML动画设置文件来创建一个Animation对象;
Animation animation = AnimationUtils.loadAnimation(this, R.anim.anim_slide_right);
//得到一个LayoutAnimationController对象;
LayoutAnimationController controller = new LayoutAnimationController(animation);
controller.setOrder(LayoutAnimationController.ORDER_NORMAL);  //设置控件显示的顺序;
controller.setDelay(0.2f);    //设置控件显示间隔时间;
mListView.setLayoutAnimation(controller);//为ListView设置LayoutAnimationController属性;

完整代码:

LayoutTransitionActivity

public class LayoutTransitionActivity extends AppCompatActivity {
    private LinearLayout mLlContainer;
    private ListView mListView;
    private int itemNum;
    private ArrayAdapter<String> mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_layout_transition);
        mLlContainer = (LinearLayout) findViewById(R.id.ll_container);
        mListView = (ListView) findViewById(listView);
        List<String> testData = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            testData.add("item: " + i);
        }
        mAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, testData);
    }

    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn_add:
                Button button = new Button(this);
                button.setText("item: " + ++itemNum);
                mLlContainer.addView(button);
                break;
            case R.id.btn_remove:
                if (mLlContainer.getChildCount() > 0) {
                    mLlContainer.removeViewAt(mLlContainer.getChildCount() - 1);
                    itemNum--;
                }
                break;
            case R.id.btn_removeAll:
                if (mLlContainer.getChildCount() > 0) {
                    mLlContainer.removeAllViews();
                    itemNum = 0;
                }
                break;
            case R.id.btn_listViewAnim:
//                //通过加载XML动画设置文件来创建一个Animation对象;
//                Animation animation = AnimationUtils.loadAnimation(this, R.anim.anim_slide_right);
//                //得到一个LayoutAnimationController对象;
//                LayoutAnimationController controller = new LayoutAnimationController(animation);
//                controller.setOrder(LayoutAnimationController.ORDER_NORMAL);  //设置控件显示的顺序;
//                controller.setDelay(0.2f);    //设置控件显示间隔时间;
//                mListView.setLayoutAnimation(controller);//为ListView设置LayoutAnimationController属性;
                mListView.setAdapter(mAdapter);
                break;
            default:
                break;
        }
    }
}

源码参见: http://download.csdn.net/detail/maimiho/9660930
Android 动画总结-Activity切换动画 http://write.blog.csdn.net/mdeditor
Android 动画总结-Layout动画 http://blog.csdn.net/maimiho/article/details/52888887
Android 动画总结-帧动画 http://blog.csdn.net/maimiho/article/details/52893291
Android 动画总结-补间动画 http://blog.csdn.net/maimiho/article/details/52893403
Android 动画总结-属性动画 http://blog.csdn.net/maimiho/article/details/52894023
Android 动画总结-ViewPropertyAnimator http://blog.csdn.net/maimiho/article/details/52894151
Android 动画总结-矢量动画 http://blog.csdn.net/maimiho/article/details/52894266

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值