Känna av då scrollview rör sig up/down?

Diskussion i 'Frågor, support och diskussion' startad av blueWater, 23 januari 2012.

  1. blueWater

    blueWater Baby Droid Medlem

    Blev medlem:
    24 december 2009
    Inlägg:
    29
    Mottagna gillanden:
    0

    MINA ENHETER

    Hej!
    Vilken metod skall man använda som känner av då scrollview i en listview rör sig neråt eller uppåt?
    Jag behöver visa en bild då den rör sig uppåt, och en annan bild då den rör sig neråt, i en och samma (listview) list-rad.

    Tack!
     
  2. liato

    liato Adult Droid Medlem

    Blev medlem:
    6 maj 2010
    Inlägg:
    982
    Mottagna gillanden:
    361

    MINA ENHETER

    Du får extenda ScrollView och overrida onScrollChanged. Exempel:

    Kod:
    public class ExtendedScrollView extends ScrollView {
    
        private OnScrollChangedListener mOnScrollChangedListener;
    
        public ExtendedScrollView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
        }
    
        public ExtendedScrollView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public ExtendedScrollView(Context context) {
            super(context);
        }
    
        @Override
        protected void onScrollChanged(int l, int t, int oldl, int oldt) {
            super.onScrollChanged(l, t, oldl, oldt);
            if (mOnScrollChangedListener != null) {
                mOnScrollChangedListener.onScrollChanged(l, t, oldl, oldt);
            }
        }
        
        public interface OnScrollChangedListener {
            public void onScrollChanged(int l, int t, int oldl, int oldt);
        }
        
        public void setOnScrollChangedListener(OnScrollChangedListener listener) {
            mOnScrollChangedListener = listener;
        }
    }
     
  3. blueWater

    blueWater Baby Droid Medlem

    Blev medlem:
    24 december 2009
    Inlägg:
    29
    Mottagna gillanden:
    0

    MINA ENHETER

    Hej Liato och tack för svaret!
    Jag förstår inte riktigt varför man måste extenda dvs göra ny klass. Ingår inte listeners för scrollview som för button, typ onClick? Alltså att man bara implements Listener?
    Hur kopplar jag då ihop denna scrollview metod med typ, if scroll down{get image nr 1}, else if scroll up {get image nr 2}?
    Jag är rätt så ny Android utvecklare, därav kanske konstiga frågor ....
     
  4. liato

    liato Adult Droid Medlem

    Blev medlem:
    6 maj 2010
    Inlägg:
    982
    Mottagna gillanden:
    361

    MINA ENHETER

    Nope, man kan inte lyssna efter scroll i en vanlig ScrollView. Med koden jag bifogade kan du lägga in en lyssnare och se om användaren scrollade upp eller ner genom att jämföra "t" och "oldt".
    Exempel:

    Kod:
            ExtendedScrollView sv = (ExtendedScrollView) findViewById(R.id.scrollview);
            sv.setOnScrollChangedListener(new OnScrollChangedListener() {
                
                @Override
                public void onScrollChanged(int l, int t, int oldl, int oldt) {
                    Log.d("ExtendedScrollView", String.format("Användaren scrollade %s.", t > oldt ? "ned" : t < oldt ? "upp" : "inte"));
                }
            });
    
     
  5. liato

    liato Adult Droid Medlem

    Blev medlem:
    6 maj 2010
    Inlägg:
    982
    Mottagna gillanden:
    361

    MINA ENHETER

    Nope, man kan inte lyssna efter scroll i en vanlig ScrollView. Med koden jag bifogade kan du lägga in en lyssnare och se om användaren scrollade upp eller ner genom att jämföra "t" och "oldt".
    Exempel:

    Kod:
            ExtendedScrollView sv = (ExtendedScrollView) findViewById(R.id.scrollview);
            sv.setOnScrollChangedListener(new OnScrollChangedListener() {
                
                @Override
                public void onScrollChanged(int l, int t, int oldl, int oldt) {
                    Log.d("ExtendedScrollView", String.format("Användaren scrollade %s.", t > oldt ? "ned" : t < oldt ? "upp" : "inte"));
                }
            });