Android: ScrollView içindeki bir Görünümün görünür olup olmadığını nasıl kontrol edebilirim?


168

ScrollViewBir dizi sahip bir var Views. Bir görünümün şu anda görünür olup olmadığını belirlemek istiyorum (herhangi bir kısmı şu anda tarafından görüntüleniyorsa ScrollView). Bunu yapmak için aşağıdaki kod beklenir, şaşırtıcı değil:

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
}

Bunu nasıl çalıştıracağınızı merak ediyorum. Aynı şeyi yapmaya çalışıyorum ama bir ScrollView sadece 1 doğrudan çocuk barındırabilir. "Görünümler diziniz" ScrollView içindeki başka bir mizanpaja mı sarılmış? Benimki bu şekilde düzenlenir, ancak bunu yaptığımda burada verilen cevapların hiçbiri işe yaramaz.
Rooster242

1
Evet, görünümlerim dizisi ScrollView'ın 1 alt öğesi olan bir LinearLayout'ta. Qberticus'un yanıtı benim için çalıştı.
ab11

Yanıtlar:


65

Test ettiğiniz görünümde View#getHitRectkullanmak yerine kullanın View#getDrawingRect. Sen kullanabilirsiniz View#getDrawingRectüzerindeScrollView açıkça hesaplamak yerine.

Kod kaynağı View#getDrawingRect:

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

Kod kaynağı View#getHitRect:

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

35
Bu yöntemleri nereye çağırmalıyım?
Tooto

3
@Qberticus Yöntemleri nasıl çağırırım? Ben kullanıyorum ve her zaman yanlış döndürüyor. Lütfen bana bildirin
KK_07k11A0585

2
Bu yöntemleri tam olarak nereden çağırmalı?
Zemaitis

193

Bu çalışıyor:

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
Mükemmel çalışıyor. Netleştirmek için: görünüm tamamen veya kısmen görünür durumdaysa true değerini döndürür; false değeri, görünümün tamamen görünür olmadığı anlamına gelir.
qwertzguy

1
[1] bir almak için bu kod kullanılır GridView/ ListView/ GridViewWithHeaderile çalışan SwipeRefreshLayout.
Kartik

Birisi bunun neden işe yaradığını açıklayabilir mi? getHitRectüst koordinatlarda getLocalVisibleRectbir rekt döndürür , ancak scrollview yerel koordinatlarında bir rekt döndürür, değil mi?
Pim

3
Bu, örtüşmeleri kapsamaz, Çocuk Görünümü başka bir alt öğe ile çakışırsa, yine de doğru olur
Pradeep

1
Evet, bir Rect örneğine ihtiyacımız var.Ancak getHitRect için gerekli. Bir Rect (0,0-0,0) kullanırsam farklı olabilir mi? GetLocalVisibleRect çağrısını görebiliyoruz getGlobalVisibleRect.And Rect burada r.set (0, 0, genişlik, yükseklik); @ BillMote
chefish

56

Görünümün TAMAM görünür olduğunu tespit etmek istiyorsanız :

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
Bu doğru cevap =) Benim durumumda eğer böyle değiştirdim: scrollBounds.top <= top && scrollBounds.bottom => alt
Helton Isac

2
+1 Helton, görünümünüz kaydırma görünümünüz için yukarı veya aşağıya doğru itilirse, sırasıyla <= veya> = gerekir
Joe Maher

Bunu gerçekten test ettin mi? ScrollView ve TextView öğelerini alt öğe olarak her zaman en basit düzende false döndürür.
Farid

1
GetHitRect () & getDrawingRect () arasındaki fark nedir? Lütfen rehber
VVB

2
Bu kod yalnızca görünüm doğrudan ScrollView kapsayıcısının kök dizinine eklenirse çalışır. Çocuk görünümünde vb. Bir çocuk görüşünü ele almak istiyorsanız Phan Van
Linh'in cevabını kontrol edin

12

Çözümüm NestedScrollViewScroll öğesini kullanmaktır :

    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+ gerektirir
SolidSnake

@SolidSnake, farklı sınıfları içe aktarmanıza gerek yok, iyi çalışıyor
Parth Anjaria

10

GetLocalVisibleRect kullanarak Bill Mote'un cevabında biraz genişlemek için, görünümün yalnızca kısmen görünür olup olmadığını kontrol etmek isteyebilirsiniz:

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
Bu işe yaramaz .. kısmen görünür görüntü bile tamamen görünür olarak kategorize edilir
azfar

10

Bu uzantı, görünümün tamamen görünür olmasını sağlamaya yardımcı olur .
Ayrıca View, ... çocuğunuzun bir çocuğu ise de işe yarar ScrollView(örneğin: 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
}

Not

1) view.getY()ve view.getX()x, y değerini İLK EBEVEYE döndür .

2) Link'in nasıl getDrawingRectgeri döneceğine dair örnekresim açıklamasını buraya girin


Görünüm klavye altında gizli ise yöntem yanlış döndürmelidir bir çözüm istedim ve bu işi yapar. Teşekkürler.
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
Bu, ab11'in istediklerinden farklıdır. isShown (), görünümün ekranın görünür bölgesinde olup olmadığını değil, yalnızca görünürlük bayrağını kontrol eder.
Romain Guy

4
@Romain Guy Bir görünüm ekranda tamamen kaydırıldığında kod kapsamaz. Genel statik int getVisiblePercent (Görünüm v) {if (v.isShown ()) {Rect r = new Rect (); boolean isVisible = v.getGlobalVisibleRect (r); if (isVisible) {çift sVisible = r.width () * r.height (); double sTotal = v.getWidth () * v.getHeight (); dönüş (int) (100 * sVisible / sTotal); } başka {dönüş -1; }} başka {dönüş -1; }} `
chefish

6

Bugün aynı problemle karşılaştım. Google referansını okurken ve okurken bu yazıyı ve bunun yerine kullandığım bir yöntemi buldum;

public final boolean getLocalVisibleRect (Rect r)

Sadece Rect sağlamak için değil, aynı zamanda Görünümün görünür olup olmadığını gösteren boolean. Negatif tarafta bu yöntem belgelenmemiştir :(


1
Bu yalnızca öğenin görünürlük (true) olarak ayarlanmış olup olmadığını gösterir. "Görünür" öğenin görünüm alanında gerçekten görünür olup olmadığını söylemez.
Bill Mote

GetLocalVisibleRect kodu talebinizi desteklemiyor: `genel genel boole getLocalVisibleRect (Rect r) {final Point offset = mAttachInfo! = Null? mAttachInfo.mPoint: new Point (); if (getGlobalVisibleRect (r, ofset)) {r.offset (-offset.x, -offset.y); // r yerel dönüşünü doğru yap; } yanlış döndür; } `
mbafford

6

Ben senin Viewtamamen olup olmadığını tespit etmek istiyorum visible, bu yöntemi ile deneyin:

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.
    }
}

Kesinlikle konuşmak gerekirse bir görünümün görünürlüğünü elde edebilirsiniz:

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

Bir Görünümdeki görünürlüğün olası sabit değerleri şunlardır:

GÖRÜNÜR Bu görünüm görülebilir. SetVisibility (int) ve android: visibility ile kullanın.

GÖRÜNMEZ Bu görüş görünmezdir, ancak yine de yerleşim amaçları için yer kaplar. SetVisibility (int) ve android: visibility ile kullanın.

GONE Bu görünüm görünmezdir ve mizanpaj için yer kaplamaz. SetVisibility (int) ve android: visibility ile kullanın.


3
yavaş alkış. OP'nin bilmek istediği, görünümün görünürlüğünün View # VISIBLE olduğunu varsayarsak, görünümün bir kaydırma görünümünde görünür olup olmadığını nasıl bilebiliriz.
Joao Sousa

1
Sadece basit bir projeyi kontrol ettim. Düzen, alt öğe olarak ScrollView ve TextView öğelerine sahiptir; TextView tamamen görünür olsa bile her zaman false değerini döndürür.
Farid

Her zaman yanlış döndürür.
Rahul

3

FocusAwareScrollViewGörünüm görünür olduğunda hangi bildirimleri kullanabilirsiniz :

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
                }
            }
        });

    }

İşte sınıf:

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

Kotlin yolu;

Kaydırma görünümünün kaydırmasını listelemek için bir uzantı ve ekranda çocuk görünümü görünürse bir eylem elde edin.

@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
    }
}

Kaydırılabilir herhangi bir görünüm için bu uzantı işlevini kullanın

nestedScrollView.setChildViewOnScreenListener(childView) {
               action()
            }

0

Çok geç olduğunu biliyorum. Ama iyi bir çözümüm var. Aşağıda, kaydırma görünümünde görünüm görünürlük yüzdesini almak için kod snippet'i bulunmaktadır.

Her şeyden önce, kaydırma duruşu için geri arama almak için dokunmatik dinleyiciyi kaydırma görünümünde ayarlayın.

@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;
}

Yukarıdaki kod snippet'inde, kaydırma görünümü dokunma olayları için geri aramalar alıyoruz ve kaydırma duruşu için geri arama alındıktan sonra 150 milisaniyeden sonra (zorunlu değil) çalıştırılabilir bir mesaj gönderiyoruz. Bu runnable'da ekranda kaydırma görünümünün konumunu ve kaydırma görünümü yüksekliğini elde edeceğiz. Ardından, kaydırma görünümünün doğrudan alt görüntüleme grubu örneğini alın ve alt öğe sayılarını alın. Benim durumumda kaydırma görünümünün doğrudan alt öğesi scrollViewRootChild adlı LinearLayout'tur . Sonra scrollViewRootChild'in tüm alt görünümlerini yineleyin . Yukarıdaki kod snippet'inde , viewLocation adında bir tamsayı dizisinde çocuğun konumunu alıyorum, viewHeight değişken adında görüntüleme yüksekliğini görebiliyorum . Sonra getViewVisibilityOnScrollStopped özel bir yöntem çağırdı. Belgeleri okuyarak bu yöntemin dahili çalışmasını anlayabilirsiniz.

/**
 * 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.
    }
}

Bu kodda herhangi bir gelişme hissederseniz lütfen katkıda bulunun.


0

Java yanıtlarından ikisinin bir kombinasyonunu uyguladım (@ bill- mote https://stackoverflow.com/a/12428154/3686125 ve @ denys-vasylenko https://stackoverflow.com/a/25528434/3686125 ) Projem, standart vertary ScrollView veya HorizontalScrollView denetimlerini destekleyen bir Kotlin uzantıları kümesi olarak.

Bunları sadece Extensions.kt adlı bir Kotlin dosyasında attım, sınıf yok, sadece yöntemler.

Bir kullanıcı projemdeki çeşitli kaydırma görüntülerinde kaydırma yapmayı durdurduğunda hangi öğeye yapışacağını belirlemek için bunları kullandım:

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)

Örnek kullanım, scrollview LinearLayout alt öğeleri üzerinden yineleme ve günlük çıktıları:

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
neden varide ipucunu kullanıyorsunuz ve bastırıyorsunuz?
Filipkowicz

-1

Nokta ama büyük btw olan @Qberticus cevabını kullanarak, bir scrollview çağrıldığında ve kaydırıldığında @Qberticus cevabını tetikleyip tetiklemediğinizi kontrol etmek için bir sürü kod derledim ve benim durumumda bir sosyal ağ videoları içeren, bu yüzden görünüm ekranda çizildiğinde videoyu facebook ve Instagram gibi aynı fikri oynatıyorum. İşte kod:

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
                        {

                        }


                        }
                    }
                    }
                });
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.