Android抛物线下载动画制作过程
作者:Harryhtt 发布时间:2022-05-15 21:39:57
标签:Android,抛物线,下载
下载动画经常出现在下载需求多的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);
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 自定义 View 技能是成为高级工程师所必备的,笔者觉得自定义 View 没有什么捷径可走,唯有经常练习才能解决产品需求
- 相信大家最关心的肯定不是什么一大堆的破理论,然后还似懂非懂的,最关心得莫过于服务之间的参数传递,数据获取。Ok,今天就告诉大家三种微服务之间
- choose标签用法choose 标签是按顺序判断其内部 when 标签中的 test 条件出否成立,如果有一个成立,则 choose 结束
- 一、Images1、概述Image 类为Bitmap(位图) 和 Metafile(矢量图) 的类提供功能的抽象基类。Image类不能直接创
- 1. 继承1. 子类继承了父类,获得父类的全部Field和方法。子类Student类继承父类,将可以获得父类的全部Field和方法publi
- 前言已经有两个月没有更新博客了,其实这篇文章我早在两个月前就写好了,一直保存在草稿箱里没有发布出来。原因是有一些原理性的东西还没了解清楚,最
- Android 系统每隔 16ms 会发出 VSYNC 信号重绘界面(Activity)。之所以是 16ms,是因为 Android 设定的
- 在程序中对文件操作是非常常见的,而对文件的操作则不可避免的需要文件的路径,并对文件的路径进行一系列的操作,例如:判断已知的路径是一个目录还是
- 本文实例讲述了C#计算字符串相似性的方法。分享给大家供大家参考。具体如下:计算字符串相似性的办法很多,甚至最笨的办法可以挨个匹配,这里要讲的
- 双重循环打印顶点在左上的直角三角形:public static void main(String[] args) { // TO
- 1.mkString()方法的使用:mkString(seq:String)方法是将原字符串使用特定的字符串seq分割。mkString(s
- Java-Web获取客户端真实IP:发生的场景:服务器端接收客户端请求的时候,一般需要进行签名验证,客户端IP限定等情况,在进行客户端IP限
- 定义桥梁模式是对象的结构模式。又称为柄体(Handle and Body)模式或接口(Interface)模式。桥梁模式的用意是&l
- Mybatis删除多个数据例如:删除数据库中sid=1和sid=2的数据操作步骤如下1.在实体类中创建一个LIst用于存放要删除的sid2.
- Java调用Linux系统命令有时候,我们在使用Java做一些操作时,可能性能上并不能达到我们满意的效果,就拿最近工作中的遇到的一个场景来说
- 模板方法-基类封装Activity和Fragment应该是Android最常用的组件,对他进行简单的封装对提高代码的简洁性也有很大的帮助。B
- 对于初学java的同学来说,第一件事不是写hello world,而是搭建好java开发环境,下载jdk,安装,配置环境变量。这些操作在xp
- 1. 引言在 Java 应用程序中,异常类对于正确捕获和处理错误至关重要。我们常常在编写异常处理的重复代码上花费时间,而不是关注应用程序的其
- 引例问题:现在有一只羊(包含属性:名字Dolly、年龄2),需要克隆10只属性完全相同的羊。一般解法:定义Sheep类表示羊,包括构造器、g
- 今天我们来编写一个缩放效果的ImageView ,网上有很多人都讲了这些。但有许多人都直接使用了库文件,那么我们今天做的是直接上代码编写一个