我们在做一些自定义控件的时候,涉及到一些切换的动画效果,我们的项目中经常用到一个封装好的方法来实现这个效果,代码如下:
/**
*此为左右滑动的动画
* @param moveX
* 移动到的位置
* @param view
* 需要移动的试图
*/
private void startAnimation(final int moveX, final View view) {
view.clearAnimation();
int old = view.getLeft();
if (moveX == old)
return;
int x = moveX - old;
TranslateAnimation animation = new TranslateAnimation(0, x, 0, 0);
animation.setDuration(100);
animation.setInterpolator(new AccelerateInterpolator());
animation.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
// 动画开始
}
@Override
public void onAnimationRepeat(Animation animation) {
// 重新开始
}
@Override
public void onAnimationEnd(Animation animation) {
// 动画结束,重新设置删除按钮位置
view.clearAnimation();
RelativeLayout.LayoutParams parm0 = new RelativeLayout.LayoutParams(
view.getWidth(), view.getHeight());
parm0.setMargins(moveX, 0, 0, 0);
view.setLayoutParams(parm0);
}
});
view.startAnimation(animation);
}
/**
* 上下滑动的动画
*
* @param moveY
* 移动到的位置
* @param view
* 需要移动的试图
*/
private void startAnimationY(final int moveY, final View view) {
int old = view.getTop();
if (moveY == old)
return;
int y = moveY - old;
TranslateAnimation animation = new TranslateAnimation(0, 0, 0, y);
animation.setDuration(100);
animation.setRepeatCount(0); // 设置重复次数
animation.setInterpolator(new LinearInterpolator());
animation.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
// 动画开始
}
@Override
public void onAnimationRepeat(Animation animation) {
// 重新开始
}
@Override
public void onAnimationEnd(Animation animation) {
// 动画结束,重新设置删除按钮位置
view.clearAnimation();
RelativeLayout.LayoutParams parm0 = new RelativeLayout.LayoutParams(
view.getWidth(), view.getHeight());
parm0.setMargins(0, moveY, 0, 0);
view.setLayoutParams(parm0);
}
});
view.startAnimation(animation);
}