1、下滑動畫
anim/item_animation.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="0"
android:fromYDelta="-100%"
android:toXDelta="0"
android:toYDelta="0"
android:duration="1000"
/>
</set>
在adapter中:
private Animation animation;
animation = AnimationUtils.loadAnimation(context, R.anim.item_animation);
animation.setInterpolator(new LinearInterpolator());//設置勻速
//在getView中,對convertView開啓動畫
convertView.startAnimation(animation);
2、其他資料
http://www.cnblogs.com/angeldevil/archive/2011/12/02/2271096.html
http://www.360doc.com/content/13/0102/22/6541311_257754535.shtml
動畫學習
3、List下滑
兩種效果:
1、如果一次性會更新多個items,那麼給前面多個view添加動畫,並且向後的動畫的開始時間逐個增加,實現淡淡劃出的效果
2、如果一次只更新一個內容,那麼只需要給position爲0的view添加動畫即可
3、如果通過改變Height來實現動畫,那麼修改高度,就不能把list對應的xml的高度固定,必須設置爲wrap_content,所有組件需要設置爲wrap_content
private int mNextItemStartDelay = 0;
private static final long ANIMATION_ITEM_DELAY_INC = 30L;//毫秒
private static final long ANIMATION_ITEM_DELAY_MAX = 1400L;//毫秒
private static final int ANIMATION_ITEM_DURATION = 500;
private static final int ANIMATIONVALUE_START_HEIGHT = 1;
private void addAnim(View convertView) {
final View animView = convertView;
animView.measure(0, 0);
AbsListView.LayoutParams oldLp = (android.widget.AbsListView.LayoutParams) animView.getLayoutParams();
if (oldLp == null) {
oldLp = new AbsListView.LayoutParams(LayoutParams.MATCH_PARENT, 1);
}
final ViewGroup.LayoutParams lp = oldLp;
final int originalHeight = animView.getMeasuredHeight();
lp.height = 1;
animView.setLayoutParams(lp);
Animator animator = getAnimatorOfItemView(animView, originalHeight);
/** 如果這裏有多個item要彈出,可以採用延遲開始時間的方式
animator.setStartDelay(mNextItemStartDelay);
if (mNextItemStartDelay < ANIMATION_ITEM_DELAY_MAX) {
mNextItemStartDelay += ANIMATION_ITEM_DELAY_INC;
}
**/
animator.start();
}
private Animator getAnimatorOfItemView(final View view, final int originalHeight) {
final ViewGroup.LayoutParams lp = view.getLayoutParams();
ValueAnimator animator = ValueAnimator.ofInt(ANIMATIONVALUE_START_HEIGHT, originalHeight);
animator.setDuration(ANIMATION_ITEM_DURATION);
animator.setInterpolator(new LinearInterpolator());//線性速度
animator.addUpdateListener(new AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
lp.height = (Integer) valueAnimator.getAnimatedValue();
view.setLayoutParams(lp);
}
});
animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
if(view.getTag() instanceof ViewHold) {
ViewHold holder = (ViewHold) view.getTag();
/** 當一次更新多個Item時,這裏有用處
if (holder.divider != null) {
holder.divider.setVisibility(needDivider ? View.VISIBLE : View.GONE);
}
**/
}
}
});
return animator;
}
4、波紋動畫
http://www.kancloud.cn/digest/liuguilin/120371