UI组件——SwipeRefreshLayout学习笔记
程序员文章站
2022-05-21 09:30:37
...
-
mStrokeInset:
表示让RectF向上下、左右的增加或减少量,arcBounds.inset(mStrokeInset, mStrokeInset);
,mStrokeInset>0是减小,mStrokeInset<0是放大,其值为:
if (mRingCenterRadius <= 0 || minEdge < 0) {
/*Math.ceil测试:表示大于或等于参数的最小值
var aa = Math.ceil(-10.9)
println("aa是$aa")
如果<0,mStrokeInset就是画笔宽度的二分之一,而minEdge 就是这个Drawable宽高中的较小者,为什么要加小于零的判断呢?
*/
insets = (float) Math.ceil(mStrokeWidth / 2.0f);
} else {
//如果大于零,insets 就是矩形的宽高的较小者除以2减去圆环的半径
insets = (float) (minEdge / 2.0f - mRingCenterRadius);
}
mStrokeInset = insets;
-
圆的半径以及画笔的宽度
这个控件实际上是由圆环和三角形拼接起来的,那么该怎么移动三角形使之与圆环实现无缝结合就是关键了,先看一下当画一个圆环时,它的起始角度为0,偏移角度为1的时候是什么样的,入下图所示:
就是图中红线的位置,这就是起始位置,要想把画好的三角形移动到这个位置,那么该偏移多少呢,y轴很简单,偏移内切矩形圆的半径即可(bounds.exactCenterY()),那么x轴呢?理论上来讲是一个内切矩形圆的半径+圆环的半径是正确的,但是别忘了,这个矩形也做过放缩(arcBounds.inset(mStrokeInset, mStrokeInset)
),那么我们在原来的基础上再减去mStrokeInset/2就对了;另一个需要清楚的问题,如下图所示:
假如红色圆环表示的是画笔的宽度,而那条灰色的线就表示圆环的半径和画笔宽度的关系。
上一篇: Processing笔记02—第一行代码
下一篇: 小练习(c#):画很多圆