听滚动事件horizo​​ntalscrollview android

i_r*_*aqz 13 android horizontalscrollview

我正在尝试在HorizontalScrollView滚动时收听事件.试过这个,但它没有打印任何东西.

HorizontalScrollView headerScrollView = new HorizontalScrollView(this);

    headerScrollView.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub
            Log.i("hv1",event.toString());
            Log.i("hv1","HELLO");
            return false;
        }
    });
Run Code Online (Sandbox Code Playgroud)

实际问题是,我想一次滚动两个HorizontalScrollView...... 当至少其中一个滚动时,它们都需要同时滚动.任何解决方法?

我使用下面的答案,然后尝试实现这个,但我不知道我需要如何使用类中的方法.

TestHorizontalScrollView headerScrollView = (TestHorizontalScrollView) findViewById(R.id.headerHv); 
Run Code Online (Sandbox Code Playgroud)

这是我需要指向布局文件中的hsv元素的方式吗?

Dav*_*vid 28

您可能想尝试创建自己的自定义类,该类扩展Horizo​​ntalScrollView并覆盖onScrollChanged()函数,因此

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

}
Run Code Online (Sandbox Code Playgroud)

即使未触摸视图,此覆盖功能也将捕获滚动位置的所有更改.这应该使您的滚动视图保持同步.


Opi*_*chs 8

老问题,但也许有帮助.你可以这样做:

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

    });
Run Code Online (Sandbox Code Playgroud)


Vah*_*yan 5

带监听器的 ScrollView,api < 23

在您的代码中写下

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) {

            }
        });
Run Code Online (Sandbox Code Playgroud)

我的水平滚动视图

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

    }
Run Code Online (Sandbox Code Playgroud)

* Xml 文件 *

<MyHorizontalScrollView
        android:id="@+id/scrollViewBrowse"
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:background="@drawable/backgroung"
        android:padding="10dp">
 </MyHorizontalScrollView>
Run Code Online (Sandbox Code Playgroud)