2017-04-05 72 views
1

我正在嘗試獲取大多數中心元素視圖位置的listview。Android listview在滾動時獲取大多數中心視圖位置

listview center view

public void getPos(final ListView listView) { 
     int firstPos = listView.getFirstVisiblePosition(); 
     int lastPos = listView.getLastVisiblePosition(); 
     int count = lastPos - firstPos; 
     int viewPosition = (count - ((int) count/2)); 
     //int viewPosition = (count - ((int) count/2)+1); 
} 

,並試圖與屏幕的X,Y

Display display = getWindowManager().getDefaultDisplay(); 
     final Point size = new Point(); 
     display.getSize(size); 
     float height = size.y; 
     float centerY=height/2; 

    listView.setOnScrollListener(new AbsListView.OnScrollListener() { 
     public void onScroll(final AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
      // TODO Auto-generated method stub 

     } 

     public void onScrollStateChanged(AbsListView view, int scrollState) { 
      //    Log.i("Yes1", "Here"); 
      if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) { 
       if (scrollState == SCROLL_STATE_IDLE) { 
        final ListView listView = (ListView) view; 
        for (int i = 0; i < listView.getLastVisiblePosition(); i++) { 
         final View firstView = listView.getChildAt(i); 
         if (firstView != null) { 
          Log.i("Height", centerY + " | " + firstView.getY()); 
         } 
        } 
       } 
      } 
     } 
    }); 

我上面的方法試過,但同時向上和向下滾動沒有得到準確的結果。任何一個有解決方案如何在listview中獲得最中心的視圖位置?

回答

0

試試這個:

   String[] values = new String[]{"Android List View", 
         "Adapter implementation", 
         "Simple List View In Android", 
         "Create List View Android", 
         "Android Example", 
         "List View Source Code", 
         "List View Array Adapter", 
         "Adapter implementation", 
         "Simple List View In Android", 
         "Create List View Android", 
         "Android Example", 
         "List View Source Code", 
         "List View Array Adapter", 
         "Adapter implementation", 
         "Simple List View In Android", 
         "Create List View Android", 
         "Android Example", 
         "List View Source Code", 
         "List View Array Adapter", 
         "Adapter implementation", 
         "Simple List View In Android", 
         "Create List View Android", 
         "Android Example", 
         "List View Source Code", 
         "List View Array Adapter", 
         "Adapter implementation", 
         "Simple List View In Android", 
         "Create List View Android", 
         "Android Example", 
         "List View Source Code", 
         "List View Array Adapter", 
         "Adapter implementation", 
         "Simple List View In Android", 
         "Create List View Android", 
         "Android Example", 
         "List View Source Code", 
         "List View Array Adapter", 
         "Adapter implementation", 
         "Simple List View In Android", 
         "Create List View Android", 
         "Android Example", 
         "List View Source Code", 
         "List View Array Adapter", 
         "Android Example List View" 
       }; 



       final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
         R.layout.row_temp, R.id.label_tv, values); 
       final ListView listView = new ListView(this); 
       listView.setAdapter(adapter); 
       setContentView(listView); 

       listView.setOnScrollListener(new AbsListView.OnScrollListener() { 
        public void onScroll(final AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
         // TODO Auto-generated method stub 

        } 

        public void onScrollStateChanged(AbsListView view, int scrollState) { 
         if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) { 
          for(int i=0;i<adapter.getCount();i++){ 
           if(listView.getChildAt(i) != null) { 
            TextView childView = (TextView) listView.getChildAt(i).findViewById(R.id.label_tv); 
            if (childView != null) { 
             childView.setBackgroundColor(Color.GREEN); 
            } 
           } 
          } 

          int centerItemPosition = ((listView.getLastVisiblePosition() - listView.getFirstVisiblePosition())/2); 
          TextView centerView =(TextView)listView.getChildAt(centerItemPosition).findViewById(R.id.label_tv); 
          centerView.setBackgroundColor(Color.RED); 
         } 
        } 
       }); 

row_temp的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"> 
<TextView 
    android:layout_width="match_parent" 
    android:id="@+id/label_tv" 
    android:textColor="@android:color/white" 
    android:text="skdjfksdf" 
    android:gravity="center" 
    android:padding="50dp" 
    android:background="@color/colorPrimaryDark" 
    android:layout_height="wrap_content" /> 

</LinearLayout> 

Output

+0

我已經寫在第1部分相同的代碼在我的問題,同時向上滾動,它的做工精細,同時滾動它不工作下。 – Hacker

+0

我有附加圖片(https://i.stack.imgur.com/yXKxZ.png)與您的代碼不起作用 – Hacker

+0

已更新我的答案,請檢查一次。 –

相關問題