Android : ScrollView 내부의보기가 보이는지 확인하는 방법은 무엇입니까?


168

나는 ScrollView일련의을 보유하고 있습니다 Views. 뷰가 현재 보이는지 여부를 확인할 수 있기를 원합니다 (그중 일부가 현재에 의해 표시되는 경우 ScrollView). 아래 코드 가이 작업을 수행 할 것으로 예상하지만 놀랍게도 그렇지 않습니다.

Rect bounds = new Rect();
view.getDrawingRect(bounds);

Rect scrollBounds = new Rect(scroll.getScrollX(), scroll.getScrollY(), 
        scroll.getScrollX() + scroll.getWidth(), scroll.getScrollY() + scroll.getHeight());

if(Rect.intersects(scrollBounds, bounds))
{
    //is  visible
}

어떻게 작동하는지 궁금합니다. 나는 똑같은 일을하려고하지만 ScrollView는 1 명의 직계 자식 만 호스팅 할 수 있습니다. "일련의 뷰"가 ScrollView 내부의 다른 레이아웃으로 둘러싸여 있습니까? 그게 내 레이아웃이 나와 있지만 내가 그렇게 할 때 여기에 주어진 대답 중 어느 것도 나를 위해 작동하지 않습니다.
Rooster242

1
예, 내 일련의 뷰는 LinearLayout 안에 있으며 ScrollView의 자식입니다. Qberticus의 답변이 저에게 효과적이었습니다.
ab11

답변:


65

테스트중인보기 View#getHitRect대신 사용하십시오 View#getDrawingRect. 당신이 사용할 수있는 View#getDrawingRectScrollView명시 적으로 계산 대신 .

코드 View#getDrawingRect:

 public void getDrawingRect(Rect outRect) {
        outRect.left = mScrollX;
        outRect.top = mScrollY;
        outRect.right = mScrollX + (mRight - mLeft);
        outRect.bottom = mScrollY + (mBottom - mTop);
 }

코드 View#getHitRect:

public void getHitRect(Rect outRect) {
        outRect.set(mLeft, mTop, mRight, mBottom);
}

35
이 메소드를 어디에서 호출해야합니까?
Tooto

3
@Qberticus 메소드를 호출하는 방법? 나는 그것을 사용하고 있으며 항상 거짓을 반환합니다. 알려주세요
KK_07k11A0585

2
이 메소드를 어디에서 호출해야합니까?
zemaitis

193

이것은 작동합니다 :

Rect scrollBounds = new Rect();
scrollView.getHitRect(scrollBounds);
if (imageView.getLocalVisibleRect(scrollBounds)) {
    // Any portion of the imageView, even a single pixel, is within the visible window
} else {
    // NONE of the imageView is within the visible window
}

1
완벽하게 작동합니다. 더 명확하게하려면 : 뷰가 완전히 또는 부분적으로 보이는 경우 true를 반환합니다. false는 뷰가 완전히 보이지 않음을 의미합니다.
qwertzguy

1
[1] 내가 얻을이 코드를 사용 GridView/ ListView/ GridViewWithHeader작업 SwipeRefreshLayout.
Kartik

왜 이것이 작동하는지 설명해 주시겠습니까? getHitRect부모 좌표에서 getLocalVisibleRectrect를 반환 하지만 스크롤 뷰의 로컬 좌표에서 rect를 반환합니까?
Pin

3
Child View가 다른 자식 요소와 겹치는 경우에도 겹침을 다루지 않습니다. 여전히 true를 반환합니다
Pradeep

1
예, Rect 인스턴스가 필요하지만 getHitRect를 가져와야합니다. 나는 사각형을 사용하는 경우 어떤 다른이 있습니까 먹 getLocalVisibleRect 호출 getGlobalVisibleRect.And 사각형이 r.set 여기에 (0, 0, 폭, 높이) 설정되어 볼 수 있습니다 (0,0-0,0) @ BillMote를.
chefish

56

보기가 완전히 표시 되는지 감지하려면 다음을 수행하십시오 .

private boolean isViewVisible(View view) {
    Rect scrollBounds = new Rect();
    mScrollView.getDrawingRect(scrollBounds);

    float top = view.getY();
    float bottom = top + view.getHeight();

    if (scrollBounds.top < top && scrollBounds.bottom > bottom) {
        return true;
    } else {
        return false;
    }
}

6
이것은 정답입니다 =) 내 경우에는 다음과 같이 변경했습니다. scrollBounds.top <= top && scrollBounds.bottom => bottom
Helton Isac

2
+1 Helton보기가 스크롤보기의 상단 또는 하단에 밀리면 각각 <= 또는> =가 필요합니다
Joe Maher

정말로 이것을 테스트 했습니까? 가장 간단한 레이아웃 ScrollView 및 TextView에서 항상 자식으로 false를 반환합니다.
Farid

1
getHitRect ()와 getDrawingRect ()의 차이점은 무엇입니까? 안내하십시오
VVB

2
이 코드는보기가 ScrollView 컨테이너의 루트에 직접 추가 된 경우에만 작동합니다. 자식보기 등에서 자식보기를 처리하려면 Phan Van Linh의 답변을 확인하십시오.
thijsonline

12

내 솔루션은 NestedScrollView스크롤 요소를 사용하는 것입니다 .

    final Rect scrollBounds = new Rect();
    scroller.getHitRect(scrollBounds);

    scroller.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {
        @Override
        public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {

            if (myBtn1 != null) {

                if (myBtn1.getLocalVisibleRect(scrollBounds)) {
                    if (!myBtn1.getLocalVisibleRect(scrollBounds)
                            || scrollBounds.height() < myBtn1.getHeight()) {
                        Log.i(TAG, "BTN APPEAR PARCIALY");
                    } else {
                        Log.i(TAG, "BTN APPEAR FULLY!!!");
                    }
                } else {
                    Log.i(TAG, "No");
                }
            }

        }
    });
}

API 23 이상이 필요함
SolidSnake 1

@SolidSnake, 당신은 다른 클래스를 가져올 필요가 없습니다, 그것은 잘 작동합니다
Parth Anjaria

10

getLocalVisibleRect를 사용하여 Bill Mote의 답변을 조금 확장하려면 뷰가 부분적으로 만 보이는지 확인하십시오.

Rect scrollBounds = new Rect();
scrollView.getHitRect(scrollBounds);
if (!imageView.getLocalVisibleRect(scrollBounds)
    || scrollBounds.height() < imageView.getHeight()) {
    // imageView is not within or only partially within the visible window
} else {
    // imageView is completely visible
}

6
이것은 작동하지 않습니다 .. 부분적으로 보이는보기조차 완전히 보이는 것으로 분류됩니다
azfar

10

이 확장은보기를 완전히 볼 수있게합니다.
귀하 View가 ...의 자녀의 자녀 인 경우에도 작동합니다 ScrollView(예 : ScrollView-> LinearLayout-> ContraintLayout-> ...-> YourView).

fun ScrollView.isViewVisible(view: View): Boolean {
    val scrollBounds = Rect()
    this.getDrawingRect(scrollBounds)
    var top = 0f
    var temp = view
    while (temp !is ScrollView){
        top += (temp).y
        temp = temp.parent as View
    }
    val bottom = top + view.height
    return scrollBounds.top < top && scrollBounds.bottom > bottom
}

노트

1) view.getY()view.getX()는 x, y의 값을 반환 먼저 부모 .

2) 다음은 LinkgetDrawingRect 를 반환 하는 방법에 대한 예 입니다. 여기에 이미지 설명을 입력하십시오


키보드 아래에보기가 숨겨져 있고 작업을 수행하면 메서드가 false를 반환 해야하는 솔루션을 원했습니다. 감사.
Rahul

8
public static int getVisiblePercent(View v) {
        if (v.isShown()) {
            Rect r = new Rect();
            v.getGlobalVisibleRect(r);
            double sVisible = r.width() * r.height();
            double sTotal = v.getWidth() * v.getHeight();
            return (int) (100 * sVisible / sTotal);
        } else {
            return -1;
        }
    }

2
이것은 ab11이 요청한 것과 다릅니다. isShown ()은 뷰가 화면의 가시 영역에 있는지 여부가 아닌 가시성 플래그 만 검사합니다.
Romain Guy

4
@Romain Guy 뷰가 화면을 완전히 스크롤 할 때 코드는 다루지 않습니다. public static int getVisiblePercent (View v) {if (v.isShown ()) {Rect r = new Rect (); 부울 isVisible = v.getGlobalVisibleRect (r); if (isVisible) {double sVisible = r.width () * r.height (); double sTotal = v.getWidth () * v.getHeight (); return (int) (100 * sVisible / sTotal); } else {return -1; }} else {return -1; }}`
chefish

6

나는 오늘 같은 문제에 직면했다. 인터넷 검색 및 Android 참조를 읽는 동안이 게시물과 메소드를 대신 사용했습니다.

public final boolean getLocalVisibleRect (Rect r)

Rect를 제공 할뿐만 아니라보기가 전혀 보이지 않는지를 나타내는 부울입니다. 부정적인 측면 에서이 방법은 문서화되어 있지 않습니다.


1
항목이 가시성 (true)으로 설정되어 있는지 알려줍니다. 뷰포트 내에서 "보이는"항목이 실제로 보이는지 알려주지 않습니다.
Bill Mote

getLocalVisibleRect의 코드는 귀하의 주장을 지원하지 않습니다 :`public final boolean getLocalVisibleRect (Rect r) {final Point offset = mAttachInfo! = null? mAttachInfo.mPoint : 새 점 (); if (getGlobalVisibleRect (r, offset)) {r.offset (-offset.x, -offset.y); // r 로컬 리턴을 true로 설정하십시오. } 거짓을 반환; }`
mbafford

6

당신 View이 완전히 있는지 감지하고 싶다면 visible이 방법으로 시도하십시오.

private boolean isViewVisible(View view) {
    Rect scrollBounds = new Rect();
    mScrollView.getDrawingRect(scrollBounds);
    float top = view.getY();
    float bottom = top + view.getHeight();
    if (scrollBounds.top < top && scrollBounds.bottom > bottom) {
        return true; //View is visible.
    } else {
        return false; //View is NOT visible.
    }
}

엄밀히 말하면 다음을 통해 뷰의 가시성을 얻을 수 있습니다.

if (myView.getVisibility() == View.VISIBLE) {
    //VISIBLE
} else {
    //INVISIBLE
}

뷰에서 가시성의 가능한 상수 값은 다음과 같습니다.

보이기이 보기가 보입니다. setVisibility (int) 및 android : visibility와 함께 사용하십시오.

보이지 않음이보기는 보이지 않지만 레이아웃 목적으로 여전히 공간을 차지합니다. setVisibility (int) 및 android : visibility와 함께 사용하십시오.

사라짐 이보기는 보이지 않으며 레이아웃을위한 공간을 차지하지 않습니다. setVisibility (int) 및 android : visibility와 함께 사용하십시오.


3
느린 박수. OP가 알고 싶어하는 것은 뷰의 가시성이 View # VISIBLE이라고 가정하면 스크롤 뷰 내에서 뷰 자체가 표시되는지 확인하는 방법입니다.
Joao Sousa

1
방금 간단한 프로젝트를 확인했습니다. 레이아웃에는 자식으로 ScrollView와 TextView가 있습니다. TextView가 완전히 표시 되더라도 항상 false를 반환합니다.
Farid

항상 false를 반환합니다.
Rahul

3

당신은 사용할 수 있습니다 FocusAwareScrollView보기가 표시되었을 때 어떤 통지를 :

FocusAwareScrollView focusAwareScrollView = (FocusAwareScrollView) findViewById(R.id.focusAwareScrollView);
    if (focusAwareScrollView != null) {

        ArrayList<View> viewList = new ArrayList<>();
        viewList.add(yourView1);
        viewList.add(yourView2);

        focusAwareScrollView.registerViewSeenCallBack(viewList, new FocusAwareScrollView.OnViewSeenListener() {

            @Override
            public void onViewSeen(View v, int percentageScrolled) {

                if (v == yourView1) {

                    // user have seen view1

                } else if (v == yourView2) {

                    // user have seen view2
                }
            }
        });

    }

클래스는 다음과 같습니다.

import android.content.Context;
import android.graphics.Rect;
import android.support.v4.widget.NestedScrollView;
import android.util.AttributeSet;
import android.view.View;

import java.util.ArrayList;
import java.util.List;

public class FocusAwareScrollView extends NestedScrollView {

    private List<OnScrollViewListener> onScrollViewListeners = new ArrayList<>();

    public FocusAwareScrollView(Context context) {
        super(context);
    }

    public FocusAwareScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public FocusAwareScrollView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public interface OnScrollViewListener {
        void onScrollChanged(FocusAwareScrollView v, int l, int t, int oldl, int oldt);
    }

    public interface OnViewSeenListener {
        void onViewSeen(View v, int percentageScrolled);
    }

    public void addOnScrollListener(OnScrollViewListener l) {
        onScrollViewListeners.add(l);
    }

    public void removeOnScrollListener(OnScrollViewListener l) {
        onScrollViewListeners.remove(l);
    }

    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        for (int i = onScrollViewListeners.size() - 1; i >= 0; i--) {
            onScrollViewListeners.get(i).onScrollChanged(this, l, t, oldl, oldt);
        }
        super.onScrollChanged(l, t, oldl, oldt);
    }

    @Override
    public void requestChildFocus(View child, View focused) {
        super.requestChildFocus(child, focused);
    }

    private boolean handleViewSeenEvent(View view, int scrollBoundsBottom, int scrollYOffset,
                                        float minSeenPercentage, OnViewSeenListener onViewSeenListener) {
        int loc[] = new int[2];
        view.getLocationOnScreen(loc);
        int viewBottomPos = loc[1] - scrollYOffset + (int) (minSeenPercentage / 100 * view.getMeasuredHeight());
        if (viewBottomPos <= scrollBoundsBottom) {
            int scrollViewHeight = this.getChildAt(0).getHeight();
            int viewPosition = this.getScrollY() + view.getScrollY() + view.getHeight();
            int percentageSeen = (int) ((double) viewPosition / scrollViewHeight * 100);
            onViewSeenListener.onViewSeen(view, percentageSeen);
            return true;
        }
        return false;
    }

    public void registerViewSeenCallBack(final ArrayList<View> views, final OnViewSeenListener onViewSeenListener) {

        final boolean[] viewSeen = new boolean[views.size()];

        FocusAwareScrollView.this.postDelayed(new Runnable() {
            @Override
            public void run() {

                final Rect scrollBounds = new Rect();
                FocusAwareScrollView.this.getHitRect(scrollBounds);
                final int loc[] = new int[2];
                FocusAwareScrollView.this.getLocationOnScreen(loc);

                FocusAwareScrollView.this.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() {

                    boolean allViewsSeen = true;

                    @Override
                    public void onScrollChange(NestedScrollView v, int x, int y, int oldx, int oldy) {

                        for (int index = 0; index < views.size(); index++) {

                            //Change this to adjust criteria
                            float viewSeenPercent = 1;

                            if (!viewSeen[index])
                                viewSeen[index] = handleViewSeenEvent(views.get(index), scrollBounds.bottom, loc[1], viewSeenPercent, onViewSeenListener);

                            if (!viewSeen[index])
                                allViewsSeen = false;
                        }

                        //Remove this if you want continuous callbacks
                        if (allViewsSeen)
                            FocusAwareScrollView.this.setOnScrollChangeListener((NestedScrollView.OnScrollChangeListener) null);
                    }
                });
            }
        }, 500);
    }
}

1

코 틀린 방식;

스크롤 뷰의 스크롤을 나열하고 자식 뷰가 화면에 표시되면 조치를 취하는 확장 프로그램

@SuppressLint("ClickableViewAccessibility")
fun View.setChildViewOnScreenListener(view: View, action: () -> Unit) {
    val visibleScreen = Rect()

    this.setOnTouchListener { _, motionEvent ->
        if (motionEvent.action == MotionEvent.ACTION_MOVE) {
            this.getDrawingRect(visibleScreen)

            if (view.getLocalVisibleRect(visibleScreen)) {
                action()
            }
        }

        false
    }
}

스크롤 가능한보기에이 확장 기능을 사용하십시오.

nestedScrollView.setChildViewOnScreenListener(childView) {
               action()
            }

0

나는 매우 늦었다는 것을 안다. 하지만 좋은 해결책이 있습니다. 아래는 스크롤보기에서보기 가시성 백분율을 얻는 코드 스 니펫입니다.

먼저 스크롤 중지를 위해 콜백을 받기 위해 스크롤보기에서 설정된 터치 리스너를 설정하십시오.

@Override
public boolean onTouch(View v, MotionEvent event) {
    switch ( event.getAction( ) ) {
        case MotionEvent.ACTION_CANCEL:
        case MotionEvent.ACTION_UP:
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    if(mScrollView == null){
                        mScrollView = (ScrollView) findViewById(R.id.mScrollView);
                    }
                    int childCount = scrollViewRootChild.getChildCount();

                    //Scroll view location on screen
                    int[] scrollViewLocation = {0,0};
                    mScrollView.getLocationOnScreen(scrollViewLocation);

                    //Scroll view height
                    int scrollViewHeight = mScrollView.getHeight();
                    for (int i = 0; i < childCount; i++){
                        View child = scrollViewRootChild.getChildAt(i);
                        if(child != null && child.getVisibility() == View.VISIBLE){
                            int[] viewLocation = new int[2];
                            child.getLocationOnScreen(viewLocation);
                            int viewHeight = child.getHeight();
                            getViewVisibilityOnScrollStopped(scrollViewLocation, scrollViewHeight,
                                    viewLocation, viewHeight, (String) child.getTag(), (childCount - (i+1)));
                        }
                    }
                }
            }, 150);
            break;
    }
    return false;
}

위의 코드 스 니펫에서 스크롤보기 터치 이벤트에 대한 콜백을 받고 스크롤에 대한 콜백을 중지 한 후 150 밀리 초 (필수 아님) 후에 실행 파일을 게시합니다. 그 runnable에서 우리는 화면에서 스크롤보기의 위치와 스크롤보기 높이를 얻습니다. 그런 다음 스크롤보기의 직접 하위 뷰 그룹 인스턴스를 가져오고 하위 수를 가져옵니다. 필자의 경우 스크롤보기의 직접적인 자식은 scrollViewRootChild 라는 LinearLayout 입니다. 그런 다음 scrollViewRootChild의 모든 자식 뷰를 반복하십시오 . 위의 코드 스 니펫에서 viewLocation 이라는 정수 배열로 화면에서 자식의 위치를 ​​얻고 있음을 알 수 있습니다. 변수 이름 viewHeight 에서 시야 높이를 얻습니다. . . 그런 다음 개인 메소드 getViewVisibilityOnScrollStopped를 호출했습니다.. 문서를 읽으면이 방법의 내부 작업에 대한 이해를 얻을 수 있습니다.

/**
 * getViewVisibilityOnScrollStopped
 * @param scrollViewLocation location of scroll view on screen
 * @param scrollViewHeight height of scroll view
 * @param viewLocation location of view on screen, you can use the method of view claas's getLocationOnScreen method.
 * @param viewHeight height of view
 * @param tag tag on view
 * @param childPending number of views pending for iteration.
 */
void getViewVisibilityOnScrollStopped(int[] scrollViewLocation, int scrollViewHeight, int[] viewLocation, int viewHeight, String tag, int childPending) {
    float visiblePercent = 0f;
    int viewBottom = viewHeight + viewLocation[1]; //Get the bottom of view.
    if(viewLocation[1] >= scrollViewLocation[1]) {  //if view's top is inside the scroll view.
        visiblePercent = 100;
        int scrollBottom = scrollViewHeight + scrollViewLocation[1];    //Get the bottom of scroll view 
        if (viewBottom >= scrollBottom) {   //If view's bottom is outside from scroll view
            int visiblePart = scrollBottom - viewLocation[1];  //Find the visible part of view by subtracting view's top from scrollview's bottom  
            visiblePercent = (float) visiblePart / viewHeight * 100;
        }
    }else{      //if view's top is outside the scroll view.
        if(viewBottom > scrollViewLocation[1]){ //if view's bottom is outside the scroll view
            int visiblePart = viewBottom - scrollViewLocation[1]; //Find the visible part of view by subtracting scroll view's top from view's bottom
            visiblePercent = (float) visiblePart / viewHeight * 100;
        }
    }
    if(visiblePercent > 0f){
        visibleWidgets.add(tag);        //List of visible view.
    }
    if(childPending == 0){
        //Do after iterating all children.
    }
}

이 코드가 개선되었다고 생각되면 기여하십시오.


0

나는 Java 응답 중 두 가지 (@ bill-mote https://stackoverflow.com/a/12428154/3686125 및 @ denys-vasylenko https://stackoverflow.com/a/25528434/3686125 ) 조합을 구현 했습니다. 표준 vertial ScrollView 또는 HorizontalScrollView 컨트롤을 지원하는 Kotlin 확장 세트로서의 프로젝트.

방금 클래스가 아닌 메소드 인 Extensions.kt라는 Kotlin 파일에 이것을 넣었습니다.

사용자가 프로젝트의 다양한 스크롤보기에서 스크롤을 중지 할 때 스냅 할 항목을 결정하기 위해이를 사용했습니다.

fun View.isPartiallyOrFullyVisible(horizontalScrollView: HorizontalScrollView) : Boolean {
    @Suppress("CanBeVal") var scrollBounds = Rect()
    horizontalScrollView.getHitRect(scrollBounds)
    return getLocalVisibleRect(scrollBounds)
}

fun View.isPartiallyOrFullyVisible(scrollView: ScrollView) : Boolean {
    @Suppress("CanBeVal") var scrollBounds = Rect()
    scrollView.getHitRect(scrollBounds)
    return getLocalVisibleRect(scrollBounds)
}

fun View.isFullyVisible(horizontalScrollView: HorizontalScrollView) : Boolean {
    @Suppress("CanBeVal") var scrollBounds = Rect()
    horizontalScrollView.getDrawingRect(scrollBounds)
    val left = x
    val right = left + width
    return scrollBounds.left < left && scrollBounds.right > right
}

fun View.isFullyVisible(scrollView: ScrollView) : Boolean {
    @Suppress("CanBeVal") var scrollBounds = Rect()
    scrollView.getDrawingRect(scrollBounds)
    val top = y
    val bottom = top + height
    return scrollBounds.top < top && scrollBounds.bottom > bottom
}

fun View.isPartiallyVisible(horizontalScrollView: HorizontalScrollView) : Boolean = isPartiallyOrFullyVisible(horizontalScrollView) && !isFullyVisible(horizontalScrollView)
fun View.isPartiallyVisible(scrollView: ScrollView) : Boolean = isPartiallyOrFullyVisible(scrollView) && !isFullyVisible(scrollView)

스크롤보기의 LinearLayout 자식 및 로깅 출력을 반복하는 사용법 예제 :

val linearLayoutChild: LinearLayout = getChildAt(0) as LinearLayout
val scrollView = findViewById(R.id.scroll_view) //Replace with your scrollview control or synthetic accessor
for (i in 0 until linearLayoutChild.childCount) {
    with (linearLayoutChild.getChildAt(i)) {
        Log.d("ScrollView", "child$i left=$left width=$width isPartiallyOrFullyVisible=${isPartiallyOrFullyVisible(scrollView)} isFullyVisible=${isFullyVisible(scrollView)} isPartiallyVisible=${isPartiallyVisible(scrollView)}")
    }
}

1
varide 힌트를 사용 하고 억제합니까?
Filipkowicz

-1

요점이지만 훌륭한 btw 인 @Qberticus 응답을 사용하여 스크롤보기가 호출되고 스크롤 될 때마다 @Qberticus 응답을 트리거하는지 확인하고 원하는 모든 작업을 수행 할 수 있는지 확인하는 많은 코드를 비교했습니다. 내 경우에는 비디오가 포함 된 소셜 네트워크이므로 화면에보기가 그려지면 페이스 북 및 Instagram과 같은 아이디어를 비디오로 재생합니다. 코드는 다음과 같습니다.

mainscrollview.getViewTreeObserver().addOnScrollChangedListener(new OnScrollChangedListener() {

                    @Override
                    public void onScrollChanged() {
                        //mainscrollview is my scrollview that have inside it a linearlayout containing many child views.
                        Rect bounds = new Rect();
                         for(int xx=1;xx<=postslayoutindex;xx++)
                         {

                          //postslayoutindex is the index of how many posts are read.
                          //postslayoutchild is the main layout for the posts.
                        if(postslayoutchild[xx]!=null){

                            postslayoutchild[xx].getHitRect(bounds);

                        Rect scrollBounds = new Rect();
                        mainscrollview.getDrawingRect(scrollBounds);

                        if(Rect.intersects(scrollBounds, bounds))
                        {
                            vidPreview[xx].startPlaywithoutstoppping();
                         //I made my own custom video player using textureview and initialized it globally in the class as an array so I can access it from anywhere.
                        }
                        else
                        {

                        }


                        }
                    }
                    }
                });
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.