android得到控件在屏幕中的位置


getLocationOnScreen 計算該視圖在全局坐標系中的x,y值,(注意這個值是要從屏幕頂端算起,也就是包括了通知欄的高度)//獲取在當前屏幕內的絕對坐標
getLocationInWindow 計算該視圖在它所在的widnow的坐標x,y值,//獲取在整個窗口內的絕對坐標

getLeft , getTop, getBottom, getRight, 這一組是獲取相對在它父親里的坐標
int[] location = new  int[2] ;
view.getLocationInWindow(location); //獲取在當前窗口內的絕對坐標
view.getLocationOnScreen(location);//獲取在整個屏幕內的絕對坐標
location [0]--->x坐標,location [1]--->y坐標
轉:http://blog.csdn.net/sjf0115/article/details/7306284

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

  1. package xiaosi.location;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.view.View;  
  6. import android.view.View.OnClickListener;  
  7. import android.widget.Button;  
  8. import android.widget.ImageView;  
  9.   
  10. public class LocationActivity extends Activity {  
  11.     /** Called when the activity is first created. */  
  12.     private ImageView t = null;  
  13.     private Button button = null;  
  14.     @Override  
  15.     public void onCreate(Bundle savedInstanceState) {  
  16.         super.onCreate(savedInstanceState);  
  17.         setContentView(R.layout.main);  
  18.           
  19.         t = (ImageView)findViewById(R.id.l);  
  20.         button = (Button)findViewById(R.id.button);  
  21.         button.setOnClickListener(new buttonListener());  
  22.     }     
  23.     public class buttonListener implements OnClickListener{  
  24.   
  25.         public void onClick(View v)  
  26.         {  
  27.             int[] location = new int[2];  
  28.             t.getLocationOnScreen(location);  
  29.             int x = location[0];  
  30.             int y = location[1];  
  31.             System.out.println("x:"+x+"y:"+y);  
  32.             System.out.println("圖片各個角Left:"+t.getLeft()+"Right:"+t.getRight()+"Top:"+t.getTop()+"Bottom:"+t.getBottom());  
  33.         }  
  34.     }  
  35. }  

 

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());
		}
    }
}

 


 

 

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <Button  
  8.         android:id="@+id/button"  
  9.         android:layout_width="fill_parent"  
  10.         android:layout_height="wrap_content"  
  11.         android:text="button"/>  
  12.     <ImageView  
  13.         android:id="@+id/l"  
  14.         android:layout_width="wrap_content"  
  15.         android:layout_height="wrap_content"  
  16.         android:layout_gravity="center"  
  17.         android:src="@drawable/a" />  
  18. </LinearLayout>  

 

<?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>

 


 

 

 

 

 

轉:http://suchang1123.blog.163.com/blog/static/200194051201252925258254/ 

 

 

 

int[] location =newint[2];


/**獲取在當前窗口內的絕對坐標,getLeft , getTop, getBottom, getRight, 這一組是獲取相對在它父窗口里的坐標。*/
view.getLocationInWindow(location); 

//獲取在整個屏幕內的絕對坐標,注意這個值是要從屏幕頂端算起,也就是包括了通知欄的高度。
view.getLocationOnScreen(location);

其中 location [0]代表x坐標,location [1] 代表  坐標。
 
所以在需要確定組件在父窗體中的坐標時,使用 getLocationInWindow ,需要獲得組件在整個屏幕的坐標時,使用 getLocationOnScreen。
這里要注意雖然getLocationOnScreen是獲取組件在屏幕中的坐標,但如果我們想拿到這個坐標,並且在這個坐標附近再添加一個組件時,直接使用拿到的坐標來建立新的組件是達不到效果的。


View itemView = userManagerView.getListView().getChildAt(j);// 獲取列表子項
int[] location =newint[2];
itemView.getLocationOnScreen(location);
ImageView image =newImageView(getContext());

image.setBackgroundResource(R.drawable.operator);
if(GlobalData.loginState()){
params=newAbsoluteLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT, location[0]-15, location[1]-95);
}else{
params=newAbsoluteLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT, location[0]-15, location[1]-25);
}
image.setLayoutParams(params);

 

在代碼中,我想根據itemVIew的坐標來繪制一個新的ImageView控件,但如果整個界面沒有父容器時,拿到的坐標是可以直接使用的,而當前界面上有父容器,或者有與其平行的界面時,坐標是有偏移的,所以我加上了有些判斷處理,根據不同的布局,適當的調整下坐標的偏移量


if(GlobalData.loginState()){
params=newAbsoluteLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT, location[0]-15, location[1]-95);
}else{
params=newAbsoluteLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT, location[0]-15, location[1]-25);
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM