实现上述功能代码很简单,如下:
private ObjectAnimator leftAnimator, rightAnimator;
private void changeText(View tvFrom, View tvTo) {
float distance = tvTo.getX() - tvFrom.getX();
float textWidth = tvFrom.getWidth() - tvTo.getWidth();
if (distance < 0) {
distance = Math.abs(distance);
float otherDistance = distance - Math.abs(textWidth);
if (textWidth > 0) {
otherDistance = distance + textWidth;
}
leftAnimator = ObjectAnimator.ofFloat(tvFrom, "translationX", otherDistance, 0);
rightAnimator = ObjectAnimator.ofFloat(tvTo, "translationX", -distance, 0);
} else {
float otherDistance = distance + Math.abs(textWidth);
if (textWidth > 0) {
otherDistance = distance - textWidth;
}
leftAnimator = ObjectAnimator.ofFloat(tvFrom, "translationX", 0, distance);
rightAnimator = ObjectAnimator.ofFloat(tvTo, "translationX", 0, -otherDistance);
}
leftAnimator.setDuration(500);
leftAnimator.start();
rightAnimator.setDuration(500);
rightAnimator.start();
rightAnimator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
startAnimal = false;
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
}
需要注意的是,如果是简单的展示就没什么问题了,但是如果是要对转换后进行操作的话还要想到这个转换其实是将整个控件也掉位置了,不仅仅只是显示效果而已。需要处理对应的逻辑。
|