您的位置:首页 > 移动开发 > Android开发

Android动画相关

2016-06-26 23:48 411 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: