android 获取控件在屏幕中的坐标


今天,简单讲讲android如何获取控件在屏幕中的坐标。


这个其实也很简单,但是昨天做一个功能时,需要功能控件的坐标做一些逻辑操作时,居然不知道怎么做。所以在网上查找了资料后,解决了这个问题。这里记录一下。


getLocationOnScreen ,计算该视图在全局坐标系中的x,y值,(注意这个值是要从屏幕顶端算起,也就是索包括了通知栏的高度)//获取在当前屏幕内的绝对坐标

getLocationInWindow ,计算该视图在它所在的widnow的坐标x,y值,//获取在整个窗口内的绝对坐标 (不是很理解= =、)

getLeft , getTop, getBottom, getRight, 这一组是获取相对在它父亲里的坐标


如果在Activity的OnCreate()事件输出那些参数,是全为0,要等UI控件都加载完了才能获取到这些。

package xiaosi.location;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

public class LocationActivity extends Activity {
    /** Called when the activity is first created. */
	private ImageView t = null;
	private Button button = null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        t = (ImageView)findViewById(R.id.l);
        button = (Button)findViewById(R.id.button);
        button.setOnClickListener(new buttonListener());
    }   
    public class buttonListener implements OnClickListener{

		public void onClick(View v)
		{
			int[] location = new int[2];
	        t.getLocationOnScreen(location);
	        int x = location[0];
	        int y = location[1];
	        System.out.println("x:"+x+"y:"+y);
            System.out.println("图片各个角Left:"+t.getLeft()+"Right:"+t.getRight()+"Top:"+t.getTop()+"Bottom:"+t.getBottom());
		}
    }
}


xml文件如下:

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

    <Button
        android:id="@+id/button"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="button"/>
    <ImageView
        android:id="@+id/l"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:src="@drawable/a" />
</LinearLayout>


输出结果是:


那如果需要打开activity时获取控件的位置怎么办?其实也很简单。

如果在Activity的OnCreate()事件输出那些参数,是全为0,要等UI控件都加载完了才能获取到这些。
onWindowFocusChanged(boolean hasFocus)中获取为好

即覆写Activity的onWindowFocusChanged(boolean hasFocus)方法
XXX_Activity:

@Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        int[] location1 = new int[2] ;
        view.getLocationInWindow(location1); //获取在当前窗口内的绝对坐标
        int[] location2 = new int[2] ;
        view.getLocationOnScreen(location2);//获取在整个屏幕内的绝对坐标
        //do something
    }


android 获取控件在屏幕中的坐标就讲完了。


就这么简单。



猜你喜欢

转载自blog.csdn.net/bzlj2912009596/article/details/79922837