⑴ android怎麼獲取bitmap左上角坐標
用ImageView來裝載這個bitmap並且填滿整個ImageView,再用imageview對象來獲取坐標值,getX(),getY(),獲取的就是左上角的坐標值
⑵ android中獲得控制項的位置(相對於布局文件)
正確的代碼如下所示
java">TextViewtv=(TextView)findViewById(R.id.text);
tv.getViewTreeObserver().addOnGlobalLayoutListener(newOnGlobalLayoutListener(){
@Override
publicvoidonGlobalLayout(){
//這里執行獲取位置大小操作
intleft=tv.getLeft();
inttop=tv.getTop();
intbottom=tv.getBottom();
intright=tv.getRight();
//tv相對於父布局的坐標就得出來了
}
}
view的位置和大小是通過onLayout和onMeasure方法計算出來的,執行到activity的onCreate()方法時,尚未開始計算控制項的大小和位置,所以是取不到的
OnGlobalLayoutListener 是ViewTreeObserver的內部類,當一個視圖樹的布局發生改變時,可以被ViewTreeObserver監聽到,這是一個注冊監聽視圖樹的觀察者(observer),在視圖樹的全局事件改變時得到通知
除了OnGlobalLayoutListener ,ViewTreeObserver還有如下內部類:
interfaceViewTreeObserver.OnGlobalFocusChangeListener
當在一個視圖樹中的焦點狀態發生改變時,所要調用的回調函數的介面類
interfaceViewTreeObserver.OnGlobalLayoutListener
當在一個視圖樹中全局布局發生改變或者視圖樹中的某個視圖的可視狀態發生改變時,所要調用的回調函數的介面類
interfaceViewTreeObserver.OnPreDrawListener
當一個視圖樹將要繪制時,所要調用的回調函數的介面類
interfaceViewTreeObserver.OnScrollChangedListener
當一個視圖樹中的一些組件發生滾動時,所要調用的回調函數的介面類
interfaceViewTreeObserver.OnTouchModeChangeListener
當一個視圖樹的觸摸模式發生改變時,所要調用的回調函數的介面類
⑶ android View坐標系:getX/getTranslation/getLeft
圖中灰色矩形是320X480屏幕區域,綠色矩形是300X300的父View,實線黃色矩形是100X100的子View,虛線黃色矩形是實線矩形setTranslationX(100)/setTranslationY(100)之後的位置。
以下如無特別說明,所有的方法說明均是以實線黃色矩形作為參照。
getX()/getY()獲取的是其左上角相對於父View(綠色矩形)的左上角坐標位置,圖中getX()=100,getY()=100。
getTranslationX/Y獲取的是當前View相對於其當前位置的偏移,向左為負值,向右為正值,因此對於實線黃色矩形來說getTranslationX()=0,getTranslationY()=0,而對於虛線黃色矩形來說getTranslationX()=100,getTranslationY()=100,translationX = getX()-getLeft(),修改translationX/Y的值,會導致getX/Y的變化。但是,如果修改X/Y的值並不會導致translationX/Y的變化,他們的值依然是0。
getLeft/Right/Top/Bottom,獲取的是View相對於父View左側/頂部的距離,圖中實線黃色矩形的getLeft()=100,getRight()=200(紅色線標識所示),getTop()=100,getBottom()=200(紫色線標識所示),該系列方法嚴格來講控制的是View的尺寸而不是位置,因此在setX或者setTranslationX時雖然改變了View的位置,但是其Left/Right/Top/Bottom參數卻沒有改變。因此對於圖中的虛線黃色矩形,getLeft/Right/Top/Bottom獲取到的值依然是100/200/100/200,如果通過setLeft(0),setTop(0)方法將實線黃色矩形的left和top值修改為0,則該矩形的左上角會與父View(綠色矩形)的左上角重合,而該矩形的右下角不變,同時getLeft()=0,getTop()=0,getRight()=200,getTop()=200,getX()=0,getY()=0,getTranslationX()=0,getTranslationY()=0。