直接上干货~~
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="1000"
android:interpolator="@android:anim/accelerate_interpolator"
android:fillAfter="true"
android:fillEnabled="true"
android:fromXDelta="0"
android:fromYDelta="0"
android:repeatCount="1"
android:repeatMode="reverse"
android:toXDelta="100%"
android:toYDelta="0" />
set>
//属性解析:
float fromXDelta,这个参数表示动画开始的点离当前View X坐标上的差值
float toXDelta,这个参数表示动画结束的点离当前View X坐标上的差值
float fromYDelta,这个参数表示动画开始的点离当前View Y坐标上的差值
float toYDelta,这个参数表示动画开始的点离当前View Y坐标上的差值
如果view在A(x,y)点 那么动画就是从B点(x+fromXDelta, y+fromYDelta)点移动到C 点(x+toXDelta,y+toYDelta)点.
如上面属性表示view的起始位置A(x,y),从A(x+0,y+0)移动到B(x+x,y+0)
/**
* 位移动画
*
* @param context
* @param view 目标view
*/
public static void startTranslateAnim(Context context, View view) {
Animation animation = AnimationUtils.loadAnimation(context, R.anim.anim_translate);
if (view != null)
view.startAnimation(animation);
}
public static void animTranslate(View view){
// TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue,int fromYType, float fromYValue, int toYType, float toYValue)
//当这里的 type=Animation.ABSOLUTE时,就和上面的xml效果一样
//经测试这里的 value 取值为当前参照物的多少倍,即:
// type = Animation.RELATIVE_TO_SELF 表示x坐标移动到相对自己的0.5倍距离
// type = Animation.RELATIVE_TO_PARENT 表示x坐标移动到自己父控件x轴的0.5倍距离 即 x + 0.5ParentX
TranslateAnimation animation = new TranslateAnimation(Animation.RELATIVE_TO_SELF,0,Animation.RELATIVE_TO_SELF,0.5f,
Animation.RELATIVE_TO_SELF,0,Animation.RELATIVE_TO_SELF,0);
animation.setDuration(1000);
animation.setRepeatMode(Animation.REVERSE);
animation.setInterpolator(new AccelerateInterpolator());
animation.setFillAfter(true);
if (view != null)
view.startAnimation(animation);
}