1

HorizontalScrollViewが適切な限界に達したときを知る方法はありますか?

4

1 に答える 1

2

はい。ただし、最初に、Horizo​​ntalScrollViewクラスをオーバーライドして、独自のリスナーを提供する必要があります。何らかの理由で、SDKではOnScrollChangedリスナーに直接アクセスできません。

以下をせよ:

public class FixedScrollView extends HorizontalScrollView
{
    private ScrollViewListener scrollViewListener = null;

    public FixedScrollView(Context context)
    {
        super(context);
    }

    public FixedScrollView(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
    }

    public FixedScrollView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }

    public void setScrollViewListener(ScrollViewListener scrollViewListener)
    {
        this.scrollViewListener = scrollViewListener;
    }

    @Override
    protected void onScrollChanged(int x, int y, int oldx, int oldy)
    {
        super.onScrollChanged(x, y, oldx, oldy);
        if (scrollViewListener != null)
        {
            scrollViewListener.onScrollChanged(this, x, y, oldx, oldy);
        }
    }

    public interface ScrollViewListener
    {
        void onScrollChanged(FixedScrollView scrollView, int x, int y, int oldx, int oldy);
    }
}

次に、これをコードで次のように使用できます。

FixedScrollView scrollView = (FixedScrollView) findViewById(R.id.scroller);

onScrollChangeListenerを設定します。

scrollView.setScrollViewListener(scrollerChanged);

次に、リスナーで次の手順を実行してエッジを検出します。

ScrollViewListener scrollerChanged = new ScrollViewListener()
    {

        @Override
        public void onScrollChanged(FixedScrollView scrollView, int x, int y, int oldx, int oldy)
        {
            int maxScrollX = scrollView.getChildAt(0).getMeasuredWidth() - scrollView.getMeasuredWidth();

            if (scrollView.getScrollX() == 0)
            {
                //Left side
            }
            else if (scrollView.getScrollX() == maxScrollX)
            {
                //Right side
            }
            else
            {
                //Neither left nor right
            }
        }
    };
于 2013-01-15T15:49:31.707 に答える