2013-03-27 17 views
5

Dodałem układ liniowy w widoku poziomego przewijania, a w układzie dodam kilka widoków tekstowych. Czy w tym układzie można uzyskać widoczne dzieci?HorizontalScrollView pobierz Widoczne dzieci

ten kod uzyskać wszystkie dzieci, ale chcę, aby widoczny (obecnie wyświetlania) dzieci tylko:

final HorizontalScrollView scroll = (HorizontalScrollView)findViewById(R.id.horizontalScrollView1); 
    LinearLayout linearLayout = ((LinearLayout)scroll.findViewById(R.id.linearLayout1)); 
    int chilrenNum = linearLayout.getChildCount(); 
+0

masz na myśli "widoczne dziecko to setVisibilty (View.VISIBLE)"? lub masz na myśli "widoczny w zasięgu wzroku"? –

+0

Mam na myśli widzialny widok. – user2106897

Odpowiedz

3

Cóż, po nieco poszukiwania na SO Znalazłem odpowiedź słuchać przewinąć zdarzenia. Implement Scroll Event Listener in Android. Chodzi o zastąpienie onScrollChanged w swoim ScrollView i śledzenie widocznej części przewijania w Twojej aktywności.

Doing że można łatwo dostać widoczne widoki za pomocą kodu, który wygląda tak:

int currentPosition = lastXPosition; // lastXPosition gets updated from scroll event 
int layoutWidth = linearLayout.getWidth(); 
Display display = getWindowManager().getDefaultDisplay(); 
Point size = new Point(); 
display.getSize(size); 
int width = size.x; 
int childWidth = layoutWidth/linearLayout.getChildCount(); 
int firstVisibleXPos = currentPosition - width/2; // currentPosition will be in the middle of the screen 
int lastVisibleXPos = currentPosition + width/2; 

int indexOfFirstVisible = firstVisibleXPos/childWidth; 
int indexOfLastVisible = lastVisibleXPos/ childWidth; 

Wszystkie wyżej kod zakłada stałe zobaczyć dziecko rozmiary. jeśli używasz zmiennej wielkości podrzędnej, musisz najpierw uzyskać jej szerokość i śledzić ją, a następnie obliczyć widoczność na podstawie indeksu i pozycji w widoku nadrzędnym.

+0

Wystąpił błąd w tej linii: display.getSize (rozmiar); – user2106897

+0

Użyłem importu android.view.Display; – user2106897

+0

try int width = display.getWidth(); zamiast tego wydaje się, że budujesz na poziomie 2.x –

Powiązane problemy