Android動畫相關

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章