标签:
------你需要努力,你还没资格休息-----
Android下的动画有三种:
tween补间动画、frame帧动画、property属性动画(Android3.0后提出来的)。
补间动画:
Translation(平移)、Rotation(旋转)、Alpha(透明)、Scale(缩放)
代码方式:透明动画AlphaAnimation alpha=new AlphaAnimation(0,1);
alpha.setDuration(2000);//执行的时间
alpha.setFillAfter(true);//是否维持结束时状态
xml方式:在es/anim文件夹下面创建四个xml文件
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android" android:fromAlpha="1.0" android:toAlpha="0.5" android:fillAfter="true" android:duration="2000" > </alpha>
在代码中引用AnimationUtils.loadAnimation(this, R.anim.anim_alpha);
执行动画的控件调用方法startAnimation(alpha)执行动画
动画集合AnimationSet set=new AnimationSet(true),通过set.addAnimation();//添加动画
要执行的动画的空间如RelativeLayout对象调用startAnimation(set);//执行动画
帧动画:
像电影一样,隔段时间改变背景图片。
在drawable创建一个xml文件使用
<animator-list>
<item android:drawable="@drawable/girl_11";android:duration="200"/>
</animator-list>
属性动画:
继承关系:Animator->ValueAnimator->ObjectAnimator
提供了ofInt、ofFloat、ofObject。
objectAnimator:
如:objectAnimator.ofFloat(mImageView,"translationx",0f,200f).setDuration(200).start();
当多个动画时候使用propertyValuesHolder:
PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("alpha", 1f, 0f, 1f);
PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("scaleX", 1f, 0, 1f);
PropertyValuesHolder pvhZ = PropertyValuesHolder.ofFloat("scaleY", 1f, 0, 1f);
ObjectAnimator.ofPropertyValuesHolder(view, pvhX, pvhY,pvhZ).setDuration(1000).start();
valueAnimator:
和objectanimator用法相似,但是比objectanimator跟灵活,不需要操作属性,但一定要有getter和setter方法
public void verticalRun( View view)
{
ValueAnimator animator = ValueAnimator.ofFloat(0, mScreenHeight
- mBlueBall.getHeight());
animator.setTarget(mBlueBall);
animator.setDuration(1000).start();
// animator.setInterpolator(value)
animator.addUpdateListener(new AnimatorUpdateListener()
{
public void onAnimationUpdate(ValueAnimator animation)
{
mBlueBall.setTranslationY((Float) animation.getAnimatedValue());
}
});
}
自定义属性:抛物线
public void paowuxian(View view)
{
ValueAnimator valueAnimator = new ValueAnimator();
valueAnimator.setDuration(3000);
valueAnimator.setObjectValues(new PointF(0, 0));
valueAnimator.setInterpolator(new LinearInterpolator()); //源码中的,插值
valueAnimator.setEvaluator(new TypeEvaluator<PointF>() //自定义TypeEvaluator返回PoinF类型
{
// fraction = t / duration
@Override
public PointF evaluate(float fraction, PointF startValue,
PointF endValue)
{
Log.e(TAG, fraction * 3 + "");
// x方向200px/s ,则y方向0.5 * 10 * t
PointF point = new PointF();
point.x = 200 * fraction * 3;
point.y = 0.5f * 200 * (fraction * 3) * (fraction * 3);
return point;
}
});
valueAnimator.start();
valueAnimator.addUpdateListener(new AnimatorUpdateListener()
{
@Override
public void onAnimationUpdate(ValueAnimator animation)
{
PointF point = (PointF) animation.getAnimatedValue();
mBlueBall.setX(point.x);
mBlueBall.setY(point.y);
}
});
}
----------小弟才艺不精,如有纰漏.请各位赐教------
标签:
原文地址:http://www.cnblogs.com/yangyiyi/p/5208604.html