为Viewgourp内组件添加动画

package com.loaderman.customviewdemo;

import android.animation.Keyframe;
import android.animation.LayoutTransition;
import android.animation.ObjectAnimator;
import android.animation.PropertyValuesHolder;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;

public class MainActivity extends AppCompatActivity {
    private LinearLayout linearLayoutContainer;

    private int i = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        linearLayoutContainer = (LinearLayout) findViewById(R.id.linearlayoutcontainer);

//        LayoutTransition transition = new LayoutTransition();
//        //入场动画:view在这个容器中消失时触发的动画
//        ObjectAnimator animIn = ObjectAnimator.ofFloat(null, "rotationY", 0f, 360f, 0f);
//        transition.setAnimator(LayoutTransition.APPEARING, animIn);
//
//        //出场动画:view显示时的动画
//        ObjectAnimator animOut = ObjectAnimator.ofFloat(null, "rotation", 0f, 90f, 0f);
//        transition.setAnimator(LayoutTransition.DISAPPEARING, animOut);
//
//        PropertyValuesHolder pvhLeft = PropertyValuesHolder.ofInt("left", 0, 0);
//        PropertyValuesHolder pvhTop = PropertyValuesHolder.ofInt("top", 0, 0);
//        PropertyValuesHolder pvhScaleX = PropertyValuesHolder.ofFloat("scaleX", 1f, 0f, 1f);
//        Animator changeAppearAnimator
//                = ObjectAnimator.ofPropertyValuesHolder(linearLayoutContainer, pvhLeft, pvhTop, pvhScaleX);
//        transition.setAnimator(LayoutTransition.CHANGE_APPEARING, changeAppearAnimator);

        LayoutTransition transition = new LayoutTransition();
        PropertyValuesHolder outLeft = PropertyValuesHolder.ofInt("left", 0, 0);
        PropertyValuesHolder outTop = PropertyValuesHolder.ofInt("top", 0, 0);

        Keyframe frame0 = Keyframe.ofFloat(0f, 0);
        Keyframe frame1 = Keyframe.ofFloat(0.1f, -20f);
        Keyframe frame2 = Keyframe.ofFloat(0.2f, 20f);
        Keyframe frame3 = Keyframe.ofFloat(0.3f, -20f);
        Keyframe frame4 = Keyframe.ofFloat(0.4f, 20f);
        Keyframe frame5 = Keyframe.ofFloat(0.5f, -20f);
        Keyframe frame6 = Keyframe.ofFloat(0.6f, 20f);
        Keyframe frame7 = Keyframe.ofFloat(0.7f, -20f);
        Keyframe frame8 = Keyframe.ofFloat(0.8f, 20f);
        Keyframe frame9 = Keyframe.ofFloat(0.9f, -20f);
        Keyframe frame10 = Keyframe.ofFloat(1, 0);

        PropertyValuesHolder mPropertyValuesHolder = PropertyValuesHolder.ofKeyframe("rotation", frame0, frame1, frame2, frame3, frame4, frame5, frame6, frame7, frame8, frame9, frame10);
        ObjectAnimator mObjectAnimatorChangeDisAppearing = ObjectAnimator.ofPropertyValuesHolder(this, outLeft, outTop, mPropertyValuesHolder);
        transition.setAnimator(LayoutTransition.CHANGE_DISAPPEARING, mObjectAnimatorChangeDisAppearing);

        transition.addTransitionListener(new LayoutTransition.TransitionListener() {
            public void startTransition(LayoutTransition transition, ViewGroup container, View view, int transitionType) {
                Log.d("loaderman", "start:" + "transitionType:" + transitionType + "count:" + container.getChildCount() + "view:" + view.getClass().getName());
            }

            public void endTransition(LayoutTransition transition, ViewGroup container, View view, int transitionType) {
                Log.d("loaderman", "end:" + "transitionType:" + transitionType + "count:" + container.getChildCount() + "view:" + view.getClass().getName());
            }
        });

        linearLayoutContainer.setLayoutTransition(transition);
        findViewById(R.id.add_btn).setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                addButtonView();
            }
        });

        findViewById(R.id.remove_btn).setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                removeButtonView();
            }
        });

    }

    private void addButtonView() {
        i++;
        Button button = new Button(this);
        button.setText("button" + i);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT);
        button.setLayoutParams(params);
        linearLayoutContainer.addView(button, 0);
    }

    private void removeButtonView() {
        if (i > 0) {
            linearLayoutContainer.removeViewAt(0);
        }
        i--;
    }

}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/add_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="添加控件"/>

        <Button
            android:id="@+id/remove_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="移除控件"/>
    </LinearLayout>

    <LinearLayout
        android:id="@+id/linearlayoutcontainer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:animateLayoutChanges="false"
        android:orientation="vertical"/>

</LinearLayout>

效果:

原文地址:https://www.cnblogs.com/loaderman/p/10207414.html

时间: 2024-11-13 06:38:03

为Viewgourp内组件添加动画的相关文章

给单元素艺术添加动画

原文:Animating Single Div Art 翻译:nzbin 导读:学习工具的最好的方法就是尝试新技术,本文通过“单元素艺术”介绍了 CSS 变量的使用以及给单元素添加动画的几种方法.通过学习作者编写的复杂的“单元素”示例,相信你对 CSS 变量以及 CSS 动画会有一个深刻的认识. 如果你深入挖掘你的工具,你可以使用最基本的 HTML 做一些令人称奇的东西.我对 Lynn Fisher 以及其他人的“单元素艺术”(“Single Div Art”)印象深刻,所谓“单元素艺术”就是你

cocos2dx实例开发之2048(添加动画版)

网上找了好多教程写2048,不过都没有实现卡片的移动动画,自己写了一个不太完美的带动画版. 开发步骤: 1,设计一个CardSprite类. 2,设计主游戏场景GameScene,实现游戏逻辑,添加动画逻辑. 3,添加游戏胜利或者游戏失败的层. 4,添加声音等其他元素,专门弄了一个声音预加载的场景. 贴上主场景关键代码: GameScene.h #pragma once #include "cocos2d.h" #include "cardSprite.h" #in

企业级项目,给布局的弹出与吟唱添加动画

企业级项目,布局很枯燥,无奈之余,给布局添加动画, 使用了LayoutTransition 原本只是使用了setVisibility(View.VISIBLE), 但是显示与消失太突然.于是加入了动画, 看代码 http://download.csdn.net/detail/kan1kan5/7965869 //声明动画 resetTransition(); //初始化动画 initAnim(); private void resetTransition() { mTransitioner =

新浪微博微组件添加到博客园中

弄了半天,终于搞定了.将微博放入博客园是一件多么让人兴奋的事情. 刚开始都压根不知道要怎么用,只能在新浪开发平台上各种倒腾.最后才发现原来这么简单. 1.登录新浪微博开放平台,点击常用引导栏下的微组件 2.在微博组件中,选择一个你希望用到的 3.进到微博小工具后选择 博客挂件 在这里值的说的是,我刚开始就一直在弄我的微博秀,但是代码复制到博客园后总是清除掉.后来发现,用这个只能注册申请,而我们也没有自己的网站什么,真心很麻烦,所以直接用博客组件把.方便,省事.嘿嘿... 4.选定你的博客类型 5

COM/DCOM开发练习之进程内组件实例

作者 : 卿笃军 题目说明: 仿照例题,在其基础上实现以下功能: 1)使用C++语言实现进程内组件,组件提供复数的加.减.乘.除等计算服务:客户端部分包括录入(实部和虚部分开录入)和查询部分. 2)在VC++环境上利用ATL向导进行开发. 3)至少实现三种运行模式中的两种. 4) 程序设计风格良好,有文档注释,方法注释,语句注释.并附带说明文档. 5)下周六晚10点前统一发至我邮箱. 开工.首先编写服务器端利用ATL COM AppWizard开发出 CalcSvr.dll 第一步:打开VC++

XamarinAndroid组件教程RecylerView动画组件使用动画(2)

XamarinAndroid组件教程RecylerView动画组件使用动画(2) 如果开发者要为RecylerView的子元素添加动画效果,需要使用RecyclerView类中的SetItemAnimator()方法,其语法形式如下: public virtual void SetItemAnimator(Android.Support.V7.Widget.RecyclerView.ItemAnimator animator) 其中,animator参数指定一个动画,这个动画就是表1-1中列出的

侧边栏添加动画挂件和文字

添加动画挂件: http://abowman.com/ 点击进入网址,Start <选择动画>编辑设置>复制嵌入代码>贴到博客侧边栏公告>保存> End 返回博客页面,可以去我博客首页查看效果:http://www.cnblogs.com/lj-cn/ 添加文字: 博客侧边公告栏输入如下代码,文字可修改: <p class="p"> Play or Learn<br/><br/> It's up to you &l

布局添加动画效果

1. 布局添加动画效果 ① 视图 五个按钮 <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent&q

WPF codebehind 添加动画,移除动画

在做WPF开发的时候,有的时候需要在后台cs来控制动画的添加与移除,在前台XAML和后台添加动画与移除动画的代码如下: 前台XAML: <i:Interaction.Behaviors> <ei:TranslateZoomRotateBehavior x:Name="eiPic" ConstrainToParentBounds="True" TranslateFriction="0.1" RotationalFriction=&