千家信息网

如何实现Android轨迹动画

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍了如何实现Android轨迹动画,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体内容如下二、需求描述年中那会儿基友的
千家信息网最后更新 2026年11月02日如何实现Android轨迹动画

这篇文章主要介绍了如何实现Android轨迹动画,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

具体内容如下

二、需求描述

年中那会儿基友的公司给他了一张只有一条曲线的图,想让他按照曲线的轨迹动态展示整个曲线,然而基友忙于把妹,一个馒头的代价收买了我,于是帮他写了代码。先看下实现效果

上原始图(原始图的轨迹曲线是白色的,其他部分是透明的,这里为了便于观察,我将背景调为黑色)

三、分析实现

讲道理,刚拿到这个图片的时候我也有点懵逼,一个毫无规律的曲线很显然不能通过简单的方程式去描述点的具体位置,甚至想说设计直接给个动画岂不美滋滋......

吐槽归吐槽,需求还是要实现的,而且这个需求是有不少常见的方法可以进行实现的,比如上下两层图片保持一直,上层不断从左到右将原图纵向像素清除,然后将设计给的图片也按照从左到友的顺去绘制上去。不过这种方法的可扩展性太差,底层的图片发生改变(滑动、变色)上层也需要进行配合。

这里使用方法是:将图片中有色像素在图片上的位置按照比例映射到要绘制的View中。

比如,原图大小是200*100,要去做展示的View的尺寸大小是450*300,某点在原图中位于x100,y20的位置,那么它在view中的位置应该为225,60。也就是说将该点在途中的位置比上原图对应尺寸然后在乘以View的尺寸即可。

轨迹的获取可以通过获取全部的像素点颜色,因为透明的必然不是轨迹,所以判断Alpha值即可,又因为轨迹是一条线,当我们使用Path连点的时候为了尽量减少不必要点的连接,我这里通过平均值的方式将曲线的宽度降为1。

由于点的位置是按照尺寸比例计算的,所以无论要展示的图片尺寸有多奇葩,都可以完美适配上去

四、实现代码

public class TestView extends View implements ViewTreeObserver.OnGlobalLayoutListener{ private Paint paint = new Paint(); private Bitmap bitmap; private int[]local; boolean enter = false; int count; ViewTreeObserver observer; Canvas canvas; float lastX = 0; float lastY = 0; public TestView(Context context) { super(context); } public TestView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); observer = this.getViewTreeObserver(); observer.addOnGlobalLayoutListener(this); getImageFromAssetsFile("target.png");//读取图片 } public TestView(Context context, AttributeSet attrs) { super(context, attrs); observer = this.getViewTreeObserver(); observer.addOnGlobalLayoutListener(this); getImageFromAssetsFile("target.png"); } private void getImageFromAssetsFile(String fileName) { AssetManager am = getResources().getAssets(); try { InputStream is = am.open(fileName); bitmap = BitmapFactory.decodeStream(is); is.close(); } catch (IOException e) { e.printStackTrace(); } } private void filterColor(){ int w = bitmap.getWidth(); int h = bitmap.getHeight(); int[]pixels = new int[w*h]; local = new int[w];//以原图宽为单位,保存点在原图Y轴上的位置 bitmap.getPixels(pixels,0,bitmap.getWidth(),0,0,bitmap.getWidth(),bitmap.getHeight()); for(int i = 0; i < w; i++){ int lenght = 0; int total = 0; for(int j = 0;j0) { path.lineTo((getMeasuredWidth() / (float) bitmap.getWidth()) * (float) i, (((float) getMeasuredHeight()-25) / (float) bitmap.getHeight()) * (float) local[i]+7); lastX = (getMeasuredWidth() / (float) bitmap.getWidth()) * (float) i; lastY = (((float) getMeasuredHeight()-25 )/ (float) bitmap.getHeight()) * (float) local[i]; } } } if(count

当然了,这个代码也只是给基友交差用的,还有不少地方能做优化,比如:将图片读取放在子线程、对图片大小进行判断避免OOM、大图加载图片压缩。

感谢你能够认真阅读完这篇文章,希望小编分享的"如何实现Android轨迹动画"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

图片 轨迹 位置 原图 曲线 尺寸 篇文章 动画 代码 像素 大小 方法 需求 原始 上层 时候 比例 画笔 背景 颜色 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 手冲咖啡和咖啡机区别 河南云网互联网络科技有限公司 麻工互联网科技 北京互联网科技有限公司 互联网的科技创新 智慧科技互联网 北京禾田雨橡互联网科技 互联网科技公司名称 丰台科技园 互联网公司 联恩商钥互联网科技有限公司 互联网科技有哪些公司 重庆互联网医院沙龙医盟信息科技 互联网科技与大数据专业 中科明德北京互联网科技 宇信科技在杭州互联网排第几 本届互联网大会上的黑科技 九思连强互联网电子科技有限公司 互联网金融运营模式中的金融科技 悟空问答互联网科技 数字科技和互联网金融哪个好 互联网扶贫科技 科技与互联网发展 万易互联网科技 互联网科技公司怎么样 厦门比较好的科技互联网公司 燊美集互联网科技有限公司 华夏恒生互联网科技013171 玉溪新华互联网科技好不好 互联网时代的科技公司 银川新华互联网科技学校原画
0