作为一个老伙计,有点不太好意思写是这么基础的绘制....,害~ 每个人都有自己的故事... 我相信你也是...
搜索了一下都没有发现一个帖子介绍怎么画个正规球场,这里就随笔记录一下吧。就当回顾一下...
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
先上个效果图吧。
评论留言