如何找到HorizontalScrollView的滚动结束值

6
我需要实现以下场景:
这里有两个HorizontalScrollViews,上面的scrollView是主菜单,下面的scrollView是子菜单。
当我滚动主菜单时,中心箭头下方的菜单将在下面的滚动视图中显示其子菜单,并且从下面的滚动视图中,中心箭头下方的子菜单将显示该子菜单的屏幕。
这是我的要求:enter image description here 我已经使用了HorizontalScrollViews和ViewFlipper来实现它,也可以工作,但只有在我缓慢滚动时才会给出正确的结果,而快速滚动时则不会。我使用了onTouch()方法和ACTION_UP事件,因此当我从屏幕释放手指时,它将在该点处给我getScrollX()位置,但是在这里,我需要getScrollX()位置,当滚动完成/停止时。
这是我的代码:
  @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (v.getId()) {

            case R.id.mHorizontalScrollViewMain:
           if (event.getAction() == KeyEvent.ACTION_UP) {
            Log.d("test", " " + hsvUpperTab.getScrollX() + " , "+ mViewFlipper.getChildCount());
            getUpperTabScrolled(hsvUpperTab.getScrollX());
        }
        break;

        case R.id.mHorizontalScrollViewSub:
                if (event.getAction() == KeyEvent.ACTION_UP) {
            Log.d("test1", " " + hsvLowerTab.getScrollX());
            getLowerTabScrolled(hsvLowerTab.getScrollX());

            }

        default:
            break;

        }

        return false;
    }
3个回答

3
这是我的答案:
public class ScrollViewCustom extends HorizontalScrollView {
    private Runnable scrollerTask;
    private int intitPosition;
    private int newCheck = 100;
    private static final String TAG = "ScrollView";

    public interface onScrollStopListner{
        void onScrollStoped();
    }

    private onScrollStopListner onScrollstopListner;

    public ScrollViewCustom(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
            scrollerTask = new Runnable() {
                @Override
                public void run() {
                // TODO Auto-generated method stub
                    int newPosition = getScrollX();
                        if ( intitPosition - newPosition == 0 ) {
                            if ( onScrollstopListner != null ) {
                            onScrollstopListner.onScrollStoped();
                            }
                            }else{
                            intitPosition = getScrollX();
                            ScrollViewCustom.this.postDelayed(scrollerTask, newCheck);
                        }
                    }
        };
    }

    public void setOnScrollStopListner( ScrollViewCustom.onScrollStopListner listner ){
        onScrollstopListner = listner;
    }

    public void startScrollerTask(){
        intitPosition = getScrollX();
        ScrollViewCustom.this.postDelayed(scrollerTask, newCheck);
    }

}

以下是一个Activity:

scroll.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub
                        if ( event.getAction() == MotionEvent.ACTION_UP ) {
                            scroll.startScrollerTask();
                        }
                        return false;
            }
        });



        scroll.setOnScrollStopListner(new onScrollStopListner() {
                @Override
                public void onScrollStoped() {
                    // TODO Auto-generated method stub
                    Log.d(TAG," "+scroll.getScrollX());

                    }

        });

1

这是您需要的:Stackoverflow答案

您只需将getScrollY()替换为getScrollX()即可。


0
我们采用以下方法: 创建一个自定义HorizontalScrollView,覆盖onScrollChanged(int l, int t, int oldl, int oldt)方法并在其中编写您的代码。 为了更加精确,我们还覆盖了draw方法。

我也尝试过那个方法,但是onScrollChange()方法不是给出当前滚动值吗?我需要的是能够给我滚动结束时的值,也就是滚动完成时的值。我没有使用draw()方法,我会尝试一下这个方法。 - NaserShaikh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接