Android 实现View中添加子元素的动态效果

时间:2023-02-09 08:07:36

挤出点时间迅速把这篇博文完成。

---------------------------------------------------------------------------------------------------------

Android 实现View中添加子元素的动态效果

1. 在 Android3.0+ 平台下可以直接使用 LayoutTransition 类实现上图效果(笔者随手制作的gif,见谅见谅),实现代码:

package com.soxfmr.anim;

import android.animation.LayoutTransition;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.RelativeLayout;

public class Container extends RelativeLayout {

public Container(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutTransition transition = new LayoutTransition();
this.setLayoutTransition(transition);
}

}

接下来直接调用 addView 添加子元素即可看到效果。

---------------------------------------------------------------------------------------------------------

Android 实现View中添加子元素的动态效果

2. 如果app支持到 Android2.1 平台,那么 LayoutTransition 就无法使用,通过 Animation 实现上图效果:

package com.soxfmr.anim;

import android.content.Context;
import android.util.AttributeSet;
import android.view.animation.AlphaAnimation;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class Container extends RelativeLayout {
private Context mContext;

public Container(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
}

public void addview() {
TextView item = new TextView(mContext);
//set the animation effects to the item
AlphaAnimation alphaAnimation = new AlphaAnimation(0.0f, 1.0f);
alphaAnimation.setDuration(800);
//add the item to parent view while starting animation
item.startAnimation(alphaAnimation);
this.addView(item);
}

}

---------------------------------------------------------------------------------------------------------

3. 结合代码,以适应不同平台:

package com.soxfmr.anim;

import android.animation.LayoutTransition;
import android.content.Context;
import android.os.Build;
import android.util.AttributeSet;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class Container extends RelativeLayout {
private Context mContext;

private boolean bAnimMode = false;

public boolean isbAnimMode() {
return bAnimMode;
}

/** true is open the animation effects. */
public void setbAnimMode(boolean bAnimMode) {
this.bAnimMode = bAnimMode;
}

public Container(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
//If the platform is Android3.0 upper
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
final LayoutTransition transition = new LayoutTransition();
this.setLayoutTransition(transition);
}else {
setbAnimMode(true);
}
}

public void addview() {
TextView item = new TextView(mContext);
refreshView(item);
this.addView(item);
}

public void refreshView(View item) {
if( ismAnimMode() ) {
//set the animation effects to the item
AlphaAnimation alphaAnimation = new AlphaAnimation(0.0f, 1.0f);
alphaAnimation.setDuration(800);
//add the item to parent view while starting animation
item.startAnimation(alphaAnimation);
}
}

}