1. 程式人生 > >Android 獲取某控制元件在螢幕中的位置/座標

Android 獲取某控制元件在螢幕中的位置/座標

getLocationOnScreen,計算該檢視在全域性座標系中的x,y值,(注意這個值是要從螢幕頂端算起,也就是索包括了通知欄的高度)//獲取在當前螢幕內的絕對座標 
getLocationInWindow,計算該檢視在它所在的widnow的座標x,y值,//獲取在整個視窗內的絕對座標 (不是很理解= =、)
getLeftgetTopgetBottomgetRight這一組是獲取相對在它父親裡的座標

如果在Activity的OnCreate()事件輸出那些引數,是全為0,要等UI控制元件都載入完了才能獲取到這些。

附上部分程式碼:獲取Button在整個螢幕視窗內的位置

                            int[] location = new int[2];
				button.getLocationOnScreen(location);
				int x = location[0];
				int y = location[1];
				Log.e("位置", "X軸座標:"+x+"Y軸座標:"+y);<pre name="code" class="html">System.out.println("button的各個角的座標Left:"+button.getLeft()+"Right:"+<span style="font-family: Verdana, Arial, Helvetica, sans-serif;">button</span><span style="font-family: Verdana, Arial, Helvetica, sans-serif;">.getRight()+"Top:"+button.getTop()+"Bottom:"+button.getBottom());  </span>  
同時附上自定義PopupWindow 顯示在點選的控制元件正上方的主要程式碼:
public class MainActivity extends Activity {

	private PopupWindow popupWindow;
	private Button button01;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		popupWindow = new PopupWindow(LayoutInflater.from(this).inflate(R.layout.popupwindow, null), 200, 200);
		popupWindow.setFocusable(true);
		popupWindow.setOutsideTouchable(true);
		//popupWindow.setAnimationStyle(R.style.popupwindow);
		popupWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.ic_launcher));
		//假如設定了  setBackgroundDrawable 就算沒有設定 .setoutsideTouchable 也可以點選popupwindow之外的地方使popupwindow消失
		//只設置了  setfocusable  而沒設定 setbackgroundDrawable  點選Popupwindow 之外的地方  popupwindow不消失
		

		button01 = (Button) findViewById(R.id.button01);
		//Button button02 = (Button) findViewById(R.id.button02);
		button01.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				int[] location = new int[2];
				button01.getLocationOnScreen(location);
				int x = location[0];
				int y = location[1];
				Log.e("位置", "X位置:"+x+"Y位置:"+y);
				popupWindow.showAtLocation(v, Gravity.NO_GRAVITY, x, y-popupWindow.getHeight());
			}
		});
	}