как найти значение конца прокрутки для HorizontalScrollView

мне нужно реализовать следующий сценарий,

здесь у меня есть два HorizontalScrollViews, верхний scrollView - это главное меню, а нижний scrollView - это подменю.

когда я прокручиваю главное меню, меню, которое находится под центральной стрелкой, будет отображать свое подменю в нижнем режиме прокрутки, а из нижнего режима прокрутки подменю, которое находится под центральной стрелкой, показывает экран для этого подменю.

вот мое требование: введите здесь описание изображения

Я реализовал его с помощью 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;
    }

person NaserShaikh    schedule 03.09.2012    source источник


Ответы (3)


Вот: Ответ Stackoverflow

Все, что вам нужно сделать, это заменить getScrollY() на getScrollX().

person VicVu    schedule 12.09.2012

Вот мой ответ:

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

}

Вот в действии:

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

                    }

        });
person NaserShaikh    schedule 14.09.2012

Мы используем следующий подход: создайте собственный HorizontalScrollView и переопределите метод onScrollChanged(int l, int t, int oldl, int oldt), и ваш код попадет туда. для большей точности мы также переопределяем метод рисования.

person Sudar Nimalan    schedule 03.09.2012
comment
Я также пробовал это, но разве метод onSCrollChange() не дает текущее значение прокрутки? мне нужно что-то, что даст мне значение конца прокрутки. Я имею в виду, когда прокрутка завершена. я не использовал метод draw(), я попробую это. - person NaserShaikh; 03.09.2012