当前位置: 首页 > news >正文

网站制作比较好的公司/广州关键词排名推广

网站制作比较好的公司,广州关键词排名推广,美食网站建设,wordpress 插件安装请尊重他人的劳动成果,转载请注明出处: http://blog.csdn.net/sw950729/article/details/52239548 最近改代码改的都醉了,前几天写了个图片加载框架,点了闪退,找半天没找到问题在哪- - 看来又要花心思重写了。好了。…

请尊重他人的劳动成果,转载请注明出处:
http://blog.csdn.net/sw950729/article/details/52239548

最近改代码改的都醉了,前几天写了个图片加载框架,点了闪退,找半天没找到问题在哪- - 看来又要花心思重写了。好了。来说正文了。
上周花了一周的时间写了几个自定义view。有loading。有刷新,还有一些别的,因为最近在写个框架,所以耽误了。这个后期肯定会补上。先来看看,今天我们loading的效果:
这里写图片描述

其实这个不是很难,我居然花了两天半++。因为今天电脑太卡了。后面就只用文字表达,不上图片了。
首先我们看这个效果,这5个小圆是在一个大圆上,至于怎么获取这五个圆的位置,这是难点之一,到时候你们自己看代码理解,先上一些必用的定义:

 private static final String TAG = "SWLoadView";private Paint paint;private Path path;//大圆的半径private int bigRadius = 150;//小圆的半径private int smallRadius = 30;//移动圆的半径private int radius = 20;//存放圆的圆心private ArrayList<Circle> circlelist = new ArrayList<>();//移动的圆的圆心private ArrayList<Circle> offSetcircle1 = new ArrayList<>();private ArrayList<Circle> offSetcircle2 = new ArrayList<>();private ArrayList<Circle> offSetcircle3 = new ArrayList<>();private ArrayList<Circle> offSetcircle4 = new ArrayList<>();private ArrayList<Circle> offSetcircle5 = new ArrayList<>();private int width = 0;private int height = 0;//移动速度private int speed;private int count1 = 0;private int count2 = 0;private int count3 = 0;private int count4 = 0;private int count5 = 0;private int count6 = 0;private int count7 = 0;private int count8 = 0;private int count9 = 0;private int count10 = 0;

我们需要五个圆的圆心,以及动态滚动的球的轨迹,因为是5条线,所以这边我用了5个list来存放。代码如下:

 //依次放入五个圆心的坐标Circle circle1 = new Circle();Circle circle2 = new Circle();Circle circle3 = new Circle();Circle circle4 = new Circle();Circle circle5 = new Circle();circle1.circleX = (width / 2 + Math.abs((float) (bigRadius * Math.cos(60))));circle1.circleY = (height / 2 - Math.abs((float) (bigRadius * Math.sin(60))));circle2.circleX = (width / 2 + Math.abs((float) (bigRadius * Math.sin(120))));circle2.circleY = (height / 2 + Math.abs((float) (bigRadius * Math.cos(120))));circle3.circleX = (width / 2 - Math.abs((float) (bigRadius * Math.cos(180))));circle3.circleY = (height / 2 + Math.abs((float) (bigRadius * Math.sin(180))));circle4.circleX = (width / 2 - Math.abs((float) (bigRadius * Math.sin(240))));circle4.circleY = (height / 2 - Math.abs((float) (bigRadius * Math.cos(240))));circle5.circleX = (width / 2 + Math.abs((float) (bigRadius * Math.cos(300))));circle5.circleY = (height / 2 - Math.abs((float) (bigRadius * Math.sin(300))));circlelist.add(circle1);circlelist.add(circle2);circlelist.add(circle3);circlelist.add(circle4);circlelist.add(circle5);speed = (int) (circlelist.get(1).circleX - circlelist.get(2).circleX + 0.5);speed = speed / 20;for (int i = 0; i < speed; i++) {Circle circle = new Circle();circle.circleX = circlelist.get(0).circleX * (speed - i - 1) / speed + circlelist.get(1).circleX * (i + 1) / speed;circle.circleY = circlelist.get(0).circleY * (speed - i - 1) / speed + circlelist.get(1).circleY * (i + 1) / speed;offSetcircle1.add(circle);}for (int i = 0; i < speed; i++) {Circle circle = new Circle();circle.circleX = circlelist.get(1).circleX * (speed - i - 1) / speed + circlelist.get(2).circleX * (i + 1) / speed;circle.circleY = circlelist.get(1).circleY * (speed - i - 1) / speed + circlelist.get(2).circleY * (i + 1) / speed;offSetcircle2.add(circle);}for (int i = 0; i < speed; i++) {Circle circle = new Circle();circle.circleX = circlelist.get(2).circleX * (speed - i - 1) / speed + circlelist.get(3).circleX * (i + 1) / speed;circle.circleY = circlelist.get(2).circleY * (speed - i - 1) / speed + circlelist.get(3).circleY * (i + 1) / speed;offSetcircle3.add(circle);}for (int i = 0; i < speed; i++) {Circle circle = new Circle();circle.circleX = circlelist.get(3).circleX * (speed - i - 1) / speed + circlelist.get(4).circleX * (i + 1) / speed;circle.circleY = circlelist.get(3).circleY * (speed - i - 1) / speed + circlelist.get(4).circleY * (i + 1) / speed;offSetcircle4.add(circle);}for (int i = 0; i < speed; i++) {Circle circle = new Circle();circle.circleX = circlelist.get(4).circleX * (speed - i - 1) / speed + circlelist.get(0).circleX * (i + 1) / speed;circle.circleY = circlelist.get(4).circleY * (speed - i - 1) / speed + circlelist.get(0).circleY * (i + 1) / speed;offSetcircle5.add(circle);}

初始化不难:

private void inital() {paint = new Paint();path = new Path();paint.setStyle(Paint.Style.FILL);paint.setColor(0xff00ced1);paint.setAntiAlias(true);}

ondraw方法先画5个圆,以及一个滚动的球的路径:

protected void onDraw(Canvas canvas) {canvas.drawCircle(circlelist.get(0).circleX, circlelist.get(0).circleY, smallRadius, paint);canvas.drawCircle(circlelist.get(1).circleX, circlelist.get(1).circleY, smallRadius, paint);canvas.drawCircle(circlelist.get(2).circleX, circlelist.get(2).circleY, smallRadius, paint);canvas.drawCircle(circlelist.get(3).circleX, circlelist.get(3).circleY, smallRadius, paint);canvas.drawCircle(circlelist.get(4).circleX, circlelist.get(4).circleY, smallRadius, paint);drawBezier(canvas);invalidate();}

小球的滚动路径是用贝塞尔曲线绘画的,这也是难点之二。

if (offSetcircle1.get(count1).circleX != circlelist.get(1).circleX) {//根据角度算出四边形的四个点float offsetX = (float) (radius * Math.sin(Math.atan((offSetcircle1.get(count1).circleY - circlelist.get(0).circleY) / (offSetcircle1.get(count1).circleX - circlelist.get(0).circleX))));float offsetY = (float) (radius * Math.cos(Math.atan((offSetcircle1.get(count1).circleY - circlelist.get(0).circleY) / (offSetcircle1.get(count1).circleX - circlelist.get(0).circleX))));float x1 = circlelist.get(0).circleX - offsetX;float y1 = circlelist.get(0).circleY + offsetY;float x2 = offSetcircle1.get(count1).circleX - offsetX;float y2 = offSetcircle1.get(count1).circleY + offsetY;float x3 = offSetcircle1.get(count1).circleX + offsetX;float y3 = offSetcircle1.get(count1).circleY - offsetY;float x4 = circlelist.get(0).circleX + offsetX;float y4 = circlelist.get(0).circleY - offsetY;float anchorX1 = (x2 + x4) / 2;float anchorY1 = (y2 + y4) / 2;float anchorX2 = (x1 + x3) / 2;float anchorY2 = (y2 + y4) / 2;path.reset();path.moveTo(x1, y1);path.quadTo(anchorX1, anchorY1, x2, y2);path.lineTo(x3, y3);path.quadTo(anchorX2, anchorY2, x4, y4);path.lineTo(x1, y1);path.close();canvas.drawCircle(offSetcircle1.get(count1).circleX, offSetcircle1.get(count1).circleY, radius, paint);canvas.drawPath(path, paint);count1++;} else if (offSetcircle1.get(count1).circleX == circlelist.get(1).circleX && offSetcircle1.get(count2).circleX != circlelist.get(1).circleX) {//根据角度算出四边形的四个点float offsetX = (float) (radius * Math.sin(Math.atan((offSetcircle1.get(count2).circleY - circlelist.get(1).circleY) / (offSetcircle1.get(count2).circleX - circlelist.get(1).circleX))));float offsetY = (float) (radius * Math.cos(Math.atan((offSetcircle1.get(count2).circleY - circlelist.get(1).circleY) / (offSetcircle1.get(count2).circleX - circlelist.get(1).circleX))));float x1 = circlelist.get(1).circleX - offsetX;float y1 = circlelist.get(1).circleY + offsetY;float x2 = offSetcircle1.get(count2).circleX - offsetX;float y2 = offSetcircle1.get(count2).circleY + offsetY;float x3 = offSetcircle1.get(count2).circleX + offsetX;float y3 = offSetcircle1.get(count2).circleY - offsetY;float x4 = circlelist.get(1).circleX + offsetX;float y4 = circlelist.get(1).circleY - offsetY;float anchorX1 = (x2 + x4) / 2;float anchorY1 = (y2 + y4) / 2;float anchorX2 = (x1 + x3) / 2;float anchorY2 = (y2 + y4) / 2;path.reset();path.moveTo(x1, y1);path.quadTo(anchorX1, anchorY1, x2, y2);path.lineTo(x3, y3);path.quadTo(anchorX2, anchorY2, x4, y4);path.lineTo(x1, y1);path.close();canvas.drawCircle(offSetcircle1.get(count2).circleX, offSetcircle1.get(count2).circleY, radius, paint);canvas.drawPath(path, paint);count2++;} 

这快是绘画的右下2个小球的路径,先从小球的头部从1-2,然后小球的尾部从1-2.后面的就是复制粘贴了。因为是5条线,所以是10个动画轨迹,头过去–尾过去。
代码我已经上传到csdn上了,地址:http://download.csdn.net/detail/sw950729/9606812。一开始准备上传到github上的,结果不会搞 0 0 。
最近也是无意了写了不少自定义view的动画。如果有好的动画效果或者思路可以提出来,我会抽空试着写一写~~
好了。有兴趣交流的,请看左上角的群号,欢迎进入。

http://www.lbrq.cn/news/1058275.html

相关文章:

  • 企业网站模版/一个具体网站的seo优化
  • 住房和城乡建设部网站事故快报/黑帽seo优化
  • 私密浏览器免费版的优缺点/seo竞争对手分析
  • 网络工作室可以做房产网站吗/网站首页快速收录
  • 动漫网站的设计与实现/百度下载链接
  • 二元期权网站建设/网站工具查询
  • 网站后台用什么程序做/培训计划方案
  • 做论坛网站赚钱吗/网络营销管理系统
  • 未来网站建设想法/产品推广方法有哪些
  • wordpress支持什么数据库/昆明网站seo服务
  • 毕业设计做网站怎样的工作量算达标/seo外包品牌
  • 网页制作工具的选择与网站整体风格是有关系的/5118网站如何使用免费版
  • 昆明网站建设公司电话/百度官方推广平台
  • 工商局网上注册/seo编辑招聘
  • 山东网站建设推广/百度旧版本
  • 青岛网站开发招聘/站长工具权重查询
  • 一个网站开发的假设/厦门百度整站优化服务
  • 初中生可做兼职的网站/信息流广告优化师培训
  • 一级a做愛网站伦理片/网络优化包括
  • 做图片赚钱的网站/全网搜索软件
  • 公司网站建设30元/整合营销网络推广
  • 怎么说服企业做网站/百度引流免费推广怎么做
  • 淄博网站制作价格低/整合营销是什么
  • 中国建设银行纪念币预约网站/口碑好网络营销电话
  • 长沙个人做网站排名/超级优化大师下载
  • wordpress 本地ajax/北京网站快速优化排名
  • 那个网站做百科好过/昆明百度推广优化
  • 网站悬浮窗广告/网上怎么做推广
  • 网站建设冫首先金手指十五/厉害的seo顾问
  • 主机搭建网站教程/视频号链接怎么获取
  • selenium操作指南
  • 超轻量级通用人脸检测模型解析:1MB以下的AI如何实现实时检测
  • tensorRT配合triton部署模型
  • FreeRTOS源码分析四:时钟中断处理响应流程
  • MLIR Introduction
  • nestjs @Param 从入门到精通