github:https://github.com/REBOOTERS/AndroidAnimationExercise

日期: 栏目:欧冠直播 浏览:20 评论:0

  作为一个老伙计,有点不太好意思写是这么基础的绘制....,害~  每个人都有自己的故事... 我相信你也是...

  搜索了一下都没有发现一个帖子介绍怎么画个正规球场,这里就随笔记录一下吧。就当回顾一下...

  1.摸清规则。做什么事情都一样,我们首先要知道我们要的结果和实现的过程和步骤。

  /**

  * (1)场地:长105米、宽68米.

  * (2)球门:长7.32米、高2.44米。

  * (3)大禁区(罚球区):长40.32米、宽16.5米,在底线距离球门柱16.5米。

  * (4)小禁区(球门区):长18.32米、宽5.5米,在底线距离球门柱5.5米。

  * (5)中圈区:半径9.15米。

  * (6)角球区:半径1米,距离大禁区13.84米。

  * (7)罚球弧:以点球点为中心,半径9.15米的半圆。

  * (8)点球点:距离球门线11米。

  */

  

  2.算出要画各点,对应屏幕的x,y

  1)计算缩放比例scale和所有需要的点的坐标,四个角的点,中点,大禁区四个点,小禁区四个点,罚球弧圆心,罚球弧对应圆的角度

  2)直接按要求画出来 效果如下

  

  1).

  //整个球场的宽、长

  //为了准确等比 首先判断手机屏幕长宽比, 这里转换成 height  with

  //如果长宽比大于 105/68 则说明屏幕with可能不够,直接转换会有收缩,反之拉伸

  //所以哪边不够我们就以哪边为基准,另一边会多出来 就有padding,一般情况下,手机都是height够,with不足,我这里就没处理另一种情况了。原理说清楚了,需要的话自己处理

  所以是不能直接拿来用的,需要处理一下以Height为基准时,with会有多余。横屏未做处理,pad不能直接用,需要转换 x->y ,y->x 只有参考意义...

  //角球区

  float cornerScale = 1.0f / 68;

  float cornerRadius = screenWith * cornerScale;

  依次类推,求出所有比例,并求出对应在屏幕的宽高,点,依次画出来就好....

  类的代码在这里,可以参考一下,很多做的不足的,比如,第一步说的,完全可以把所有点的坐标先算出来,而不是在画的时候才用宽高,scale,padding,radius

  这些参数做计算求出,这样容易增加错误率,准确求出每个点的坐标,画时直接point.x ,point.y 这样会比较好一点

  现在有强迫症,尽量避免各种警告和其他提示,这个绿色的√ 看着就舒服不少...

  

  拓展:画3D的背景图的话可能涉及投影,角度  就如一个直角三棱柱,底面是平面,斜面是我们需要的面,根据仰角进行缩放。这个得补充一点数学知识,应该就能实现了...

  最后分享一个别人画的不错的模仿自定义view,其实他的3D背景也是一个固定图,可能会出现拉伸,收缩的情况。而且区域不能确定,不能判定滑出范围没有

  作者:IAM四十二

  链接:http://www.jianshu.com/p/d06c1d10bf7f

  github:https://github.com/REBOOTERS/AndroidAnimationExercise

  先上个效果图吧。

  

github:https://github.com/REBOOTERS/AndroidAnimationExercise

github:https://github.com/REBOOTERS/AndroidAnimationExercise

评论留言

我要留言

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。