学习自定义控件中…
昨天看一个仿制android5.0+的水波纹扩散效果的自定义button的博客,感觉可以拿来练习一下,就自己写了一遍
写的时候发现了一个问题
在计算最大扩散半径的时候,用了这样的算法
private void countMaxRadio() {
if (viewWidth > viewHeight) {
if (eventX < viewWidth / 2) {
maxRadio = viewWidth - eventX;
} else {
maxRadio = viewWidth / 2 + eventX;
}
} else {
if (eventY < viewHeight / 2) {
maxRadio = viewHeight - eventY;
} else {
maxRadio = viewHeight / 2 + eventY;
}
}
}
先不管Radio还是Radius,这样写有一个很不爽的地方,就是在有的地方点击之后扩散不能覆盖整个按钮就消失了(比如在右上角),而且有的地方点击了扩散覆盖整个按钮后还要持续一会,这个简直要逼死强迫症。另外这样嵌套的if看起来也不清爽。
说到底,要计算的扩散最大半径,应该就是点击位置和离他最远的那个角之间的距离。可以,这很勾股定理。
后来我把这个函数改成了这样……
private void getMaxRadius() {
int x,y;
x = eventX;
y = eventY;
if (eventX<mViewWidth/2){
x = mViewWidth - eventX;
}
if (eventY<mViewHeight/2){
y = mViewHeight -eventY;
}
maxRadius = (int) Math.sqrt(x*x+y*y)+30;
}
不太清楚这样会不会影响性能,不过看起来舒服多了…呼~