在工作中,有时候会出现动画效果,就是将一个view 移动到另一个位置,这样的简单动画,
public void showAnimation(final View originView, final View TargetView) {
final ViewGroup decorView = (ViewGroup) getDialog().getWindow().getDecorView();
int origin[] = new int[2];
int target[] = new int[2];
// originView.getLocationOnScreen(origin);
// TargetView.getLocationOnScreen(target);
originView.getLocationInWindow(origin);
originView.getLocationInWindow(target);
int width = 80;
int height = 80;
final int originX = origin[0];
final int originY = origin[1];
final int targetX = target[0] - width / 2;
final int targetY = target[1] - height / 2;
final CircleImageView imageView = new CircleImageView(getActivity());
imageView.setBorderWidth(10);
imageView.setBorderColor(Color.WHITE);
DisplayImageOptions.Builder builder = new DisplayImageOptions.Builder();
builder.showImageForEmptyUri(R.drawable.common_myctrip_home_avatar_ico);
builder.showImageOnFail(R.drawable.common_myctrip_home_avatar_ico);
// ImageLoader.getInstance().displayImage(mOpInfo.avatar, imageView, builder.build());
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.topMargin = originY;
params.leftMargin = originX;
params.height = height;
params.width = width;
decorView.addView(imageView, params);
ValueAnimator valueAnimator = ValueAnimator.ofFloat(0f);
valueAnimator.setDuration(2000);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float fraction = animation.getAnimatedFraction();
float x = originX + (targetX - originX) * fraction;
float y = originY + (targetY - originY) * fraction;
imageView.setX(x);
imageView.setY(y);
}
});
valueAnimator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
decorView.removeView(imageView);
TargetView.setVisibility(View.VISIBLE);
}
});
valueAnimator.start();
}
这是一段动画平移到 targetView 位置的一段动画,分析放在后面