listening to scroll events horizontalscrollview android

后端 未结 5 499
星月不相逢
星月不相逢 2020-11-30 05:21

I am trying to listen to the event when the HorizontalScrollView is scrolled. Tried this but it does not print anything.

HorizontalScrollView he         


        
相关标签:
5条回答
  • 2020-11-30 05:34

    You may want to try creating your own custom class that extends HorizontalScrollView and overriding the onScrollChanged() function as such

    public class TestHorizontalScrollView extends HorizontalScrollView {
    
        public TestHorizontalScrollView(Context context) {
            super(context);
        }
    
    
        @Override
        protected void onScrollChanged(int l, int t, int oldl, int oldt) {
            // TODO Auto-generated method stub
            Log.i("Scrolling", "X from ["+oldl+"] to ["+l+"]");
            super.onScrollChanged(l, t, oldl, oldt);
        }
    
    }
    

    This overriden function will catch all changes to the scroll position even when the view is not being touched. This should keep your scroll views in sync.

    0 讨论(0)
  • 2020-11-30 05:42

    To Avoid the the Api Level Problem... follow this.

    scrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
            @Override
            public void onScrollChanged() {
                int scrollY = scrollView.getScrollY(); 
                int scrollX = scrollView.getScrollX();
    
                if (scrollY > 500) {
    
                } else {
    
                }
            }
        });
    
    0 讨论(0)
  • ScrollView with Listener, api < 23

    write below in your code

    MyHorizontalScrollView scrollView = (MyHorizontalScrollView)view.findViewById(R.id.scrollViewBrowse);
            scrollView.setOnScrollChangedListener(new MyHorizontalScrollView.OnScrollChangedListener() {
                @Override
                public void onScrollChanged(int l, int t, int oldl, int oldt) {
    
                }
            });
    

    MyHorizontalScrollView

       public class MyHorizontalScrollView extends ScrollView {
    
            public OnScrollChangedListener mOnScrollChangedListener;
    
            public MyHorizontalScrollView(Context context) {
                super(context);
            }
    
            public MyHorizontalScrollView(Context context, AttributeSet attrs) {
                super(context, attrs);
            }
    
            public MyHorizontalScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
                super(context, attrs, defStyleAttr);
            }
    
            @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 void setOnScrollChangedListener(OnScrollChangedListener onScrollChangedListener){
                this.mOnScrollChangedListener = onScrollChangedListener;
            }
    
            public interface OnScrollChangedListener{
                void onScrollChanged(int l, int t, int oldl, int oldt);
            }
    
        }
    

    * Xml file *

    <MyHorizontalScrollView
            android:id="@+id/scrollViewBrowse"
            android:layout_width="match_parent"
            android:layout_height="fill_parent"
            android:background="@drawable/backgroung"
            android:padding="10dp">
     </MyHorizontalScrollView>
    
    0 讨论(0)
  • 2020-11-30 05:44

    old question, but maybe helpful. You can do something like this:

    scrollOne = (HorizontalScrollView)findViewById(R.id.horizontal_one);
    scrollTwo = (HorizontalScrollView)findViewById(R.id.horizontal_two);
    
    scrollTwo.setOnTouchListener(new OnTouchListener(){
    
        @Override
        public boolean onTouch(View view, MotionEvent event) {
            // TODO Auto-generated method stub
    
            int scrollX = view.getScrollX();
            int scrollY = view.getScrollY();
    
            scrollOne.scrollTo(scrollX, scrollY);
                        return false;
            }
    
        });
    
    0 讨论(0)
  • 2020-11-30 05:51

    you can try this, i've tried so many ways, but none of them meet my needs, and then i tried to do it myself, and i succeed , and it seems good , it's smooth.

    <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:orientation="horizontal">
    
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">
            <com.szl.fundlistdemo.WrapContentListView
                android:id="@+id/left_lv"
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                android:scrollbars="none"/>
    
            <HorizontalScrollView
                android:id="@+id/hscrollview"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">
    
                <com.szl.fundlistdemo.WrapContentListView
                    android:id="@+id/right_lv"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"/>
    
            </HorizontalScrollView>
        </LinearLayout>
    
    
    </ScrollView>
    

    public class WrapContentListView extends ListView{
    public WrapContentListView(Context context) {
        super(context);
    }
    
    public WrapContentListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    
    public WrapContentListView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
    
    
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }
    }
    
    0 讨论(0)
提交回复
热议问题