Android抛物线下载动画制作过程

作者:Harryhtt 时间:2022-05-15 21:39:57 

下载动画经常出现在下载需求多的app中,比如游戏下载平台,应用市场……

先看看效果图:

Android抛物线下载动画制作过程

实现


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);  
 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);
// 动画位移的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;
}

代码就到此结束了,看起来并不难,动手试试吧。

标签:Android,抛物线,下载
0
投稿

猜你喜欢

  • 关于idea引入spring boot <parent></parent>父依赖标红问题

    2021-11-23 09:42:12
  • SpringCloud如何搭建一个多模块项目

    2022-10-22 13:33:39
  • spring boot集成smart-doc自动生成接口文档详解

    2023-11-28 23:08:02
  • Android 应用启动欢迎界面广告的实现实例

    2023-01-26 07:34:11
  • 关于C#调用C++dll传指针释放内存问题

    2021-12-20 06:56:34
  • C#分布式事务的超时处理实例分析

    2022-06-16 03:11:28
  • Android之FanLayout制作圆弧滑动效果

    2023-01-14 16:58:29
  • Springboot jar主清单属性丢失解决方案

    2022-04-06 05:30:26
  • Spring Data JPA带条件分页查询实现原理

    2023-07-23 21:32:54
  • Struts2中validate数据校验的两种方法详解附Struts2常用校验器

    2022-06-03 11:08:13
  • C#使用listView增删操作实例

    2023-03-25 12:34:52
  • Java中的break和continue关键字的使用方法总结

    2022-07-13 11:50:46
  • java~springboot~ibatis数组in查询的实现方法

    2023-03-31 21:31:13
  • Android SDK命令行工具Monkey参数及使用解析

    2023-07-13 17:00:33
  • SpringBoot配置mybatis驼峰命名规则自动转换的实现

    2023-07-26 17:47:43
  • Java中JUC 的 Exchange 交换器详情

    2023-09-17 18:46:40
  • C#集合查询Linq在项目中使用详解

    2022-09-16 13:50:09
  • C#使用LINQ查询表达式的基本子句总结

    2022-08-05 05:09:41
  • C#快速排序算法实例分析

    2023-06-17 00:30:00
  • 深入分析C#中WinForm控件之Dock顺序调整的详解

    2022-08-21 18:45:57
  • asp之家 软件编程 m.aspxhome.com