android 中獲取當前焦點所在屏幕中的位置 view.getLocationOnScreen(location)

  View view = getCurrentFocus();//得到當前焦點所在的view.

Java代碼 複製代碼 收藏代碼
     
  1. final int[] location = new int[2];   
  2. view.getLocationOnScreen(location);  
[java] view plain copy
  1. final int[] location = new int[2];  
  2. view.getLocationOnScreen(location);  


這樣就能夠獲得該視圖在全局座標系中的x,y值,(注意這個值是要從屏幕頂端算起,也就是索包括了通知欄的高度)//獲取在當前屏幕內的絕對座標 java

Java代碼 複製代碼  收藏代碼
  1. location[0] x座標   
  2. location[1] y座標  
[java] view plain copy
  1. location[0] x座標  
  2. location[1] y座標  


應用 ,咱們能夠用來記錄上一次listview滾動到了那裏

首先咱們須要一個記錄當前滾動位置的全局變量: 數組

Java代碼 複製代碼  收藏代碼
  1. private float OldListY = -1;  
[java] view plain copy
  1. private float OldListY = -1;  


而後在 listView 的 onItemClick() 或 onItemLongClick() 事件中獲取 OldListY:


spa

Java代碼 複製代碼  收藏代碼
  1. lstView.setOnItemClickListener(new OnItemClickListener()   
  2. {   
  3.     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3)   
  4.     {   
  5.         int Pos[] = { -1, -1 };  //保存當前座標的數組  
  6.         arg1.getLocationOnScreen(Pos);  //獲取選中的 Item 在屏幕中的位置,以左上角爲原點 (0, 0)  
  7.         OldListY = (float) Pos[1];  //咱們只取 Y 座標就好了  
  8.     }   
  9. });  
[java] view plain copy
  1. lstView.setOnItemClickListener(new OnItemClickListener()  
  2. {  
  3.     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3)  
  4.     {  
  5.         int Pos[] = { -1, -1 };  //保存當前座標的數組  
  6.         arg1.getLocationOnScreen(Pos);  //獲取選中的 Item 在屏幕中的位置,以左上角爲原點 (0, 0)  
  7.         OldListY = (float) Pos[1];  //咱們只取 Y 座標就好了  
  8.     }  
  9. });  


最後要作的就是在 setAdapter() 後恢復先前的位置: .net

Java代碼 複製代碼  收藏代碼
  1. ...   
  2. lstView.setAdapter(adapter); // 從新綁定Adapter  
  3. lstView.setSelectionFromTop(index, (int) OldListY); // 恢復剛纔的位置  
相關文章
相關標籤/搜索