------你需要努力,你还没资格休息----- 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);
}
});
}
----------小弟才艺不精,如有纰漏.请各位赐教------