最近在工作中遇到了一些問題,總結下來就是Android中Rect這個類造成的。不得不說,不知道Android SDK的開發人員是怎么想的, 這個類設計的太奇葩了。首先介紹一下Rect類:Rect類主要用於表示坐標系中的一塊矩形區域,並可以對其做一些簡單操作。這塊矩形區域,需要用左上右下兩個坐標點表示(left,top,right,bottom),你也可以獲取一個Rect實例的Width和Height。就在這里,奇葩的事情來了,作為一個有一點經驗的做圖像或者矩陣運算或者編程的程序員來說,大家的共識是,如果一個矩陣是MxN的,也就是M行N列,那么行號是[0,M-1],列號是[0,N-1]。可是奇葩的Rect類並不是這樣的!如果你這么聲明一個Rect類:
Rect rect=new Rect(100,50,300,500);
那么右下角(300,500)其實是不在這個矩形里面的,但是左上角(100,50)在,也就是說,這個矩形實際表示的區域是:(100,50,299,499)。另外,Rect計算出的Height和Width倒是對的。所以,在此告誡各位程序員,在涉及Rect運算的時候,盡量不要使用它的右下角左邊,即right和bottom。因為他們是錯的。當然,在你調用android自己的函數時,是可以使用的,因為Android里面一直保持這么奇葩的思維。