14

ViewPager であるアイテムをスクロールしているときに、ListView の垂直スクロールをロックする方法はありますか? それとも、ViewPager の水平スクロールの感度を変更しますか?

ありがとう。

最終編集

これが私の更新されたソリューションです。Masoud Dadashi さんの返信に感謝します。あなたのコメントのおかげで、ようやく問題の解決策を思いつきました。

これが私のカスタム ListView クラスです。

public class FolderListView extends ListView {

    private float xDistance, yDistance, lastX, lastY;

    // If built programmatically
    public FolderListView(Context context) {
        super(context);
        // init();
    }

    // This example uses this method since being built from XML
    public FolderListView(Context context, AttributeSet attrs) {
        super(context, attrs);
        // init();
    }

    // Build from XML layout
    public FolderListView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        // init();
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {

        switch (ev.getAction()) {
        case MotionEvent.ACTION_DOWN:
            xDistance = yDistance = 0f;
            lastX = ev.getX();
            lastY = ev.getY();
            break;
        case MotionEvent.ACTION_MOVE:
            final float curX = ev.getX();
            final float curY = ev.getY();
            xDistance += Math.abs(curX - lastX);
            yDistance += Math.abs(curY - lastY);
            lastX = curX;
            lastY = curY;
            if (xDistance > yDistance)
                return false;
        }

        return super.onInterceptTouchEvent(ev);

    }
}
4

1 に答える 1

7

はいあります。ListView から拡張された別の customListView クラスを作成し、次のようにその dispatchTouchEvent イベント ハンドラーをオーバーライドします。

@Override
public boolean dispatchTouchEvent(MotionEvent ev){
   if(ev.getAction()==MotionEvent.ACTION_MOVE)
      return true;
   return super.dispatchTouchEvent(ev);
}

次に、代わりにこの customListView を使用します

于 2013-07-25T09:26:35.647 に答える