- final int[] location = new int[2];
- view.getLocationOnScreen(location);
- final int[] location = new int[2];
- view.getLocationOnScreen(location);
這樣就可以得到該視圖在全局坐標系中的x,y值,(注意這個值是要從屏幕頂端算起,也就是索包括了通知欄的高度)//獲取在當前屏幕內的絕對坐標
- location[0] x坐標
- location[1] y坐標
- location[0] x坐標
- location[1] y坐標
應用 ,我們可以用來記錄上一次listview滾動到了那里
首先我們需要一個記錄當前滾動位置的全局變量:
- private float OldListY = -1;
- private float OldListY = -1;
然后在 listView 的 onItemClick() 或 onItemLongClick() 事件中獲取 OldListY:
- lstView.setOnItemClickListener(new OnItemClickListener()
- {
- public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3)
- {
- int Pos[] = { -1, -1 }; //保存當前坐標的數組
- arg1.getLocationOnScreen(Pos); //獲取選中的 Item 在屏幕中的位置,以左上角為原點 (0, 0)
- OldListY = (float) Pos[1]; //我們只取 Y 坐標就行了
- }
- });
- lstView.setOnItemClickListener(new OnItemClickListener()
- {
- public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3)
- {
- int Pos[] = { -1, -1 }; //保存當前坐標的數組
- arg1.getLocationOnScreen(Pos); //獲取選中的 Item 在屏幕中的位置,以左上角為原點 (0, 0)
- OldListY = (float) Pos[1]; //我們只取 Y 坐標就行了
- }
- });
最后要做的就是在 setAdapter() 后恢復先前的位置:
- ...
- lstView.setAdapter(adapter); // 重新綁定Adapter
- lstView.setSelectionFromTop(index, (int) OldListY); // 恢復剛才的位置