下载动画经常出现在下载需求多的app中,比如游戏下载平台,应用市场。。。
- 实现
private void startAnim() {
//以bitmap创建new ImageView
iv.setDrawingCacheEnabled(true);
Bitmap bitmap = iv.getDrawingCache();
ImageView logo = new ImageView(this);
logo.setScaleType(ImageView.ScaleType.FIT_XY);
logo.setImageBitmap(bitmap);
int[] startLocation = new int[2];
iv.getLocationInWindow(startLocation);
//动画结束ImageView
end.getLocationInWindow(location_download);
setAnim(logo, startLocation, location_download);
}
- 设置动画
private void setAnim(final ImageView logo, int[] startLocation, int[] location_download) {
ViewGroup animMaskLayout = createAnimLayout();
animMaskLayout.addView(logo);// 把动画小球添加到动画层
final View view = addViewToAnimLayout(logo, startLocation); // 计算位移
int endX = location_download[0] - startLocation[0]; // 动画位移的X坐标
int endY = location_download[1] - startLocation[1];// 动画位移的y坐标
TranslateAnimation translateAnimationX = new TranslateAnimation(0, endX, 0, 0);
translateAnimationX.setInterpolator(new LinearInterpolator());
translateAnimationX.setRepeatCount(0);// 动画重复执行的次数
translateAnimationX.setFillAfter(true); TranslateAnimation
translateAnimationY = new TranslateAnimation(0, 0, 0, endY);
translateAnimationY.setInterpolator(new AccelerateInterpolator());
translateAnimationY.setRepeatCount(0);// 动画重复执行的次数
translateAnimationX.setFillAfter(true);
AnimationSet set = new AnimationSet(false);
set.setFillAfter(false);
set.addAnimation(translateAnimationY);
set.addAnimation(translateAnimationX);
set.setDuration(2000);// 动画的执行时间
view.startAnimation(set); // 动画监听事件
set.setAnimationListener(new Animation.AnimationListener() {
// 动画的开始
@Override
public void onAnimationStart(Animation animation) {
logo.setVisibility(View.VISIBLE);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
// 动画的结束
@Override
public void onAnimationEnd(Animation animation) {
logo.setVisibility(View.GONE);
}
});
}
- 创建动画父布局
private ViewGroup createAnimLayout() {
ViewGroup rootView = (ViewGroup) getWindow().getDecorView();
LinearLayout animLayout = new LinearLayout(this);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
animLayout.setLayoutParams(lp);
animLayout.setId(Integer.MAX_VALUE);
animLayout.setBackgroundResource(android.R.color.transparent);
rootView.addView(animLayout);
return animLayout;
}
- 设置动画布局参数
private static View addViewToAnimLayout(final View view, int[] location) {
int x = location[0];
int y = location[1];
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(80, 80);
lp.leftMargin = x;
lp.topMargin = y;
view.setLayoutParams(lp);
return view;
}
代码就到此结束了,看起来并不难,动手试试吧