Android 自定义View以及ValueAnimator学习

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

     看了ApiDemo里面的BoucingBall,觉得挺好的,所以特地学习了一下,将代码注释后贴到这里,以便以后学习。

class BallView extends View implements ValueAnimator.AnimatorUpdateListener{private static final int RED = 0xffFF8080;private static final int BLUE = 0xff8080FF;private static final int CYAN = 0xff80ffff;private static final int GREEN = 0xff80ff80;private ArrayList<ShapeHolder> balls = new ArrayList<ShapeHolder>();public BallView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);// TODO Auto-generated constructor stub}public BallView(Context context) {this(context, null);}public BallView(Context context, AttributeSet attrs) {super(context, attrs);//自定义View的背景切换动画ValueAnimator colorAnim = ObjectAnimator.ofInt(this,"backgroundColor", RED, BLUE,CYAN,GREEN);colorAnim.setDuration(3000L);colorAnim.setEvaluator(new ArgbEvaluator());colorAnim.setRepeatCount(ValueAnimator.INFINITE);colorAnim.setRepeatMode(ValueAnimator.REVERSE);colorAnim.start();}@Overrideprotected void onDraw(Canvas canvas) {//在画布上绘制图形for(ShapeHolder holder:balls){canvas.save();canvas.translate(holder.getX(), holder.getY());holder.getmShapeDrawable().draw(canvas);canvas.restore();}}@Overridepublic boolean onTouchEvent(MotionEvent event) {if (event.getAction() != MotionEvent.ACTION_DOWN&& event.getAction() != MotionEvent.ACTION_MOVE) {return false;}ShapeHolder newBall = addBall(event.getX(), event.getY());float startY = newBall.getY();float endY = getHeight() - 50f;float h = getHeight();float eventy = event.getY();int duration = (int) (500 * ((h - eventy) / h));//设置加速掉落的效果ValueAnimator bounceAnim = ObjectAnimator.ofFloat(newBall, "y",startY, endY);bounceAnim.setDuration(duration);bounceAnim.setInterpolator(new AccelerateInterpolator());//当掉落到底部的时候,球体压扁,高度降低ValueAnimator squashAnim1 = ObjectAnimator.ofFloat(newBall, "x",newBall.getX(), newBall.getX() - 25);squashAnim1.setDuration(duration /4);squashAnim1.setRepeatCount(1);squashAnim1.setRepeatMode(ValueAnimator.REVERSE);squashAnim1.setInterpolator(new DecelerateInterpolator());ValueAnimator squashAnim2 = ObjectAnimator.ofFloat(newBall,"width", newBall.getWidth(), newBall.getWidth() + 50);squashAnim2.setDuration(duration /4);squashAnim2.setRepeatCount(1);squashAnim2.setRepeatMode(ValueAnimator.REVERSE);squashAnim2.setInterpolator(new DecelerateInterpolator());ValueAnimator strechAnim1 = ObjectAnimator.ofFloat(newBall, "y",endY, endY + 25);strechAnim1.setDuration(duration /4);strechAnim1.setRepeatCount(1);strechAnim1.setRepeatMode(ValueAnimator.REVERSE);strechAnim1.setInterpolator(new DecelerateInterpolator());ValueAnimator strechAnim2 = ObjectAnimator.ofFloat(newBall,"height",newBall.getHeight(), newBall.getHeight() - 25);strechAnim2.setDuration(duration /4);strechAnim2.setRepeatCount(1);strechAnim2.setRepeatMode(ValueAnimator.REVERSE);strechAnim2.setInterpolator(new DecelerateInterpolator());ValueAnimator bounceBack = ObjectAnimator.ofFloat(newBall, "y",endY, startY+25);bounceBack.setDuration(duration);bounceAnim.setInterpolator(new DecelerateInterpolator());AnimatorSet set = new AnimatorSet();set.play(bounceAnim).before(squashAnim1);set.play(squashAnim1).with(squashAnim2);set.play(squashAnim1).with(strechAnim1);set.play(squashAnim1).with(strechAnim2);set.play(bounceBack).after(strechAnim2);//逐渐消失ValueAnimator fadeAnimator = ObjectAnimator.ofFloat(newBall,"alpha", 1F, 0F);fadeAnimator.setDuration(600L);fadeAnimator.addListener(new AnimatorListenerAdapter() {@Overridepublic void onAnimationEnd(Animator animation) {// TODO Auto-generated method stubballs.remove(((ObjectAnimator) animation).getTarget());}});AnimatorSet animationSet = new AnimatorSet();animationSet.play(set).before(fadeAnimator);animationSet.start();return true;}/*** 生成一个球* @param x* @param y* @return*/public ShapeHolder addBall(float x, float y) {// 构造一个圆形的图案OvalShape oval = new OvalShape();oval.resize(50f, 50f);ShapeDrawable draw = new ShapeDrawable(oval);ShapeHolder holder = new ShapeHolder(draw);holder.setX(x - 25);holder.setY(y - 25);int red = (int) (Math.random() * 255);int green = (int) (Math.random() * 255);int blue = (int) (Math.random() * 255);int color = 0xff000000 | red << 16 | green << 8 | blue;int darkColor = 0xff000000 | red / 4 << 16 | green / 4 << 8 | blue/ 4;Paint paint = draw.getPaint();RadialGradient gradient = new RadialGradient(12.5f, 12.5f, 50f,color, darkColor, Shader.TileMode.CLAMP);paint.setShader(gradient);holder.setmRadialGradient(gradient);holder.setmPaint(paint);balls.add(holder);return holder;}@Overridepublic void onAnimationUpdate(ValueAnimator animation) {// TODO Auto-generated method stubinvalidate();}
}

转载于:https://my.oschina.net/fengcunhan/blog/52763

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463846.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

固件工程师到底是干什么?

大家好&#xff0c;我是写代码的篮球球痴可能大家还不知道&#xff0c;我是一个写固件的工程师&#xff0c;今天和一个微信朋友聊天&#xff0c;他问我工作几年了&#xff0c;我说我工作10年了&#xff0c;而且这10年我都一直在从事嵌入式固件相关的工作。他猛的觉得很不可思议…

如何实现按键的短按、长按检测?

在电子产品中经常用到按键&#xff0c;尤其是经常需要MCU判断短按和长按这两种动作&#xff0c;本篇我们来专门聊下这个话题。只谈理论太无聊&#xff0c;我们还是结合着实际应用来说明。之前写过一篇关于《CH573第一篇&#xff1a;实现自拍杆蓝牙遥控器1》的文章&#xff0c;例…

博士也会毕业吗?

怪我读书少&#xff0c;一直以来我都认为博士是一种很神奇的物种&#xff0c;他们能学会很多我们学不会的东西&#xff0c;那些奇奇怪怪的数学题&#xff0c;还有那种要背上几天的思想政治课文&#xff0c;以及要听懂那种像鸟儿一样呼唤的讲课&#xff0c;所以&#xff0c;我一…

国外出差见闻之印度

前段时间到印度的马德拉斯市出差了3个月(4月到6月)&#xff0c;今天终于有时间将自己的出差心得和见闻记录下来&#xff0c;可能以后就会忘记。下午16:00时在深圳坐车到香港机场&#xff0c;上车没多久会让填一个入境香港的单子&#xff0c;然后是过海关&#xff0c;过海关时会…

雷军的演讲以及产品发布

8月11号是小米的发布会&#xff0c;还有雷军的年度演讲。因为工作冲突我没看直播&#xff0c;晚上回来看了公众号文章和知乎上的内容讨论&#xff0c;也看了发布的新产品。雷军那个年代能够做上程序员一定是非常牛逼的人&#xff0c;而雷军是这些牛逼人的公司总经理&#xff0c…

轻松理解UML用例图时序图类图的教程

摘自https://zhuanlan.zhihu.com/p/29874146 写在前面 当你老大扔给你这样的图&#xff0c;或者你需要完成某些功能而去看文档的时候发现以下类似这样的图会不会不&#xff08;一&#xff09;知&#xff08;脸&#xff09;所&#xff08;懵&#xff09;措&#xff08;逼&#x…

[Winodows Phone 7控件详解]控件拾遗

1.Panorama控件和Pivot控件前面讲过&#xff0c;没有必要再重复一遍了。参见我的博文&#xff1a;http://www.cnblogs.com/DebugLZQ/archive/2012/03/19/2406284.html 2.DeepZoom DeepZoom 是silverlight的特色功能之一&#xff0c;也同样被加到了windows phone 7中来。这个功能…

这个工具替代Notepad++,我很满意

用过notepad的人并且还一直坚持使用它的人一定觉得它是一个非常优秀的软件&#xff0c;这个软件用来看日志&#xff0c;看代码和文档非常方便&#xff0c;而且里面还集成了一个HEX分析的工具&#xff0c;当然还有列模式等等。不吹牛啊&#xff0c;很多软件只做到了功能&#xf…

Kubectl 部署有状态应用(下)

接上文 《Kubectl 部署有状态应用&#xff08;上&#xff09;》创建完StatefulSet后&#xff0c;本文继续介绍StatefulSet 扩展、更新、删除等内容。 StatefulSet 中的 Pod 验证序数索引和稳定的网络身份 StatefulSet 中的 Pod 具有唯一的序数索引和稳定的网络身份。 查看 …

收集的50家国产MCU信息

全球MCU市场多为欧美、日本和台湾地区企业占据&#xff0c;仅欧企恩智浦、美企Microchip、美企ST、欧企英飞凌就占据超80%的份额&#xff0c;TI、Nuvoton、罗姆、三星、东芝五家企业占据11.4%&#xff0c;而中国大陆企业所占份额6.5%不到。这意味着&#xff0c;留给中国本土供应…

Silverlight实用窍门系列:63.Silverlight中的Command,自定义简单Command

在Silverlight中的MVVM模式下将前台页面和ViewModel界面交互分离开是通过本节所要讲述的Command实现的。我们自定义一个Command需要继承于ICommand接口并且实现这个接口。它有CanExecute()、Execute()方法和CanExecuteChanged事件组成。 CanExecute()&#xff1a;判断是否继续执…

赋值运算符和拷贝构造函数的区别与联系

转载&#xff1a;http://blog.csdn.net/hebbely/article/details/65437510 简述&#xff1a; C中一般创建对象&#xff0c;拷贝或赋值的方式有构造函数&#xff0c;拷贝构造函数&#xff0c;赋值函数这三种方法。拷贝构造函数使用已有的对象创建一个新的对象&#xff0c;赋值运…

硬件有没有35岁危机?

大家好&#xff0c;我篇文章是我的朋友记得诚写的&#xff0c;分享给大家&#xff01;35岁危机指的是&#xff0c;很多企业停止招聘35岁及以上的员工&#xff0c;甚至会裁掉年纪大的人。我们经常说程序员&#xff0c;说互联网从业者有35岁危机。这个危机一方面是自己的焦虑&…

强大的独立日期选择器(date picker)插件 - Kalendae

日期&#xff1a;2012-4-16 来源&#xff1a;GBin1.com 在线演示 本地下载 今天分享一个独立的日期选择插件Kalendae&#xff0c;Kalendae是 一个强大健壮的独立日期选择器。如果你不想使用重量的jQuery UI类库的话&#xff0c;这个插件肯定是一个不错的备选。Kalendae包含了…

35家名企嵌入式/软件秋招岗位等你来!

大家好&#xff0c;我是写代码的篮球球痴。前两天一个小伙伴在微信让我帮忙推荐嵌入式招聘岗位。我实话实说&#xff0c;是有认识的人让我推荐简历的&#xff0c;但是相对于专业的招聘网站&#xff0c;我手里能拿出来的岗位实在是少之又少&#xff0c;专业的招聘网站会对不同的…

尝试梳理下ARM处理器的发展历史

大家好&#xff0c;这篇文章是我的朋友Michael Yao写的&#xff0c;我觉得非常不错&#xff0c;分享给大家。1. 前言本文尝试简单梳理下ARM处理器的发展历史、架构的演进&#xff0c;包括不同处理器的应用方向&#xff0c;但我们重点还是围绕Cortex-A系列展开&#xff0c;也会介…

linux下的CPU、内存、IO、网络的压力测试

一、对CPU进行简单测试&#xff1a; 1、通过bc命令计算特别函数 例&#xff1a;计算圆周率 echo "scale5000; 4*a(1)" | bc -l -q MATH LIBRARY If bc is invoked with the -l option, a math library is preloaded and the default scale is set to 20.…

给你这张图,你能搜索到来历吗

如果我们想让搜索引擎帮我们找到这张图的来历&#xff0c;可能吗&#xff1f; 这是目前搜索引擎做不到的。如果能做到呢&#xff1f; 转载于:https://www.cnblogs.com/shangge/archive/2008/07/23/1249767.html

晚上读内核代码

最近因为要解决一个bug&#xff0c;需要在内核的f_hid.c里面做一些适配&#xff0c;需要把这部分代码研究透彻。在这几天之前我是根本不知道什么是In端点&#xff0c;Out端点&#xff0c;以及什么是endpoint 0的&#xff0c;而且最近的一段时间&#xff0c;我一直是在写应用方面…