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

獲取控制元件在螢幕中的座標

1.核心函式

getLocationOnScreen //獲取在當前螢幕內的絕對座標 (注意這個值是要從螢幕頂端算起,包括了狀態列和通知欄的高度)
getLocationInWindow //獲取在整個視窗內的絕對座標,感覺安卓裡面沒有視窗的概念,測了幾組資料和上邊函式效果類似
getLeft , getTop, getBottom, getRight, 這一組是獲取相對在它父親裡的座標

2.核心程式碼
int[] location = new  int[2] ;
view.getLocationInWindow(location); //獲取在當前視窗內的絕對座標
view.getLocationOnScreen(location);//獲取在整個螢幕內的絕對座標
location [0]--->x座標,location [1]--->y座標

3.自己寫的例子

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/btn"
        android:layout_width="200dp"
        android:layout_height="100dp"
        android:text="按鈕"/>

    <Button
        android:id="@+id/btn1"
        android:layout_marginTop="80dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按鈕"/>

</LinearLayout>
activity程式碼
public class MainActivity extends AppCompatActivity {

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

    public void getButtonLocation() {
        final Button btn = (Button) findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int[] position = new int[2];
                //btn.getLocationInWindow  (position);//相對於視窗的座標
                btn.getLocationOnScreen (position);//相對於螢幕的座標
                Toast.makeText(getApplicationContext(),"距離左邊螢幕距離:"+position[0]+"距離上邊螢幕距離:"+position[1],Toast.LENGTH_SHORT).show();

            }
        });

        final Button btn1 = (Button) findViewById(R.id.btn1);
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int[] position = new int[2];
                btn1.getLocationOnScreen (position);//相對於螢幕的座標
                Toast.makeText(getApplicationContext(),"距離左邊螢幕距離:"+position[0]+"距離上邊螢幕距離:"+position[1],Toast.LENGTH_SHORT).show();


            }
        });
    }
}

執行結果:(我在電視機上測的,沒有狀態列和標題欄)

       距離左邊螢幕距離:0  距離上邊螢幕距離:0

       距離左邊螢幕距離:0  距離上邊螢幕距離:180