1

これがレイアウトです-

 <ScrollView>

<RelativeLayout>

    <Layout1>
    </Layout1>

    <Layout2>
    </Layout2>

    <Layout3>
    </Layout3>

    <Layout4>
    </Layout4>

    <Layout5>
    </Layout5>

    <Layout6>
    </Layout6>
</RelativeLayout>
</ScrollView>

アクティビティにonGestureListenerを実装しました。スワイプアクションを検出する必要があります-個々のレイアウト(レイアウト1からレイアウト6 )を上にスワイプして下にスワイプします。レイアウトはスクロールビューにあるため、スワイプアクション(OnFling)は検出されません。スクロールビューの子要素のonFlingを検出する方法は?どんな助けでも大歓迎です。


編集:いくつかのコードを追加します-

これが活動です-

  public class ServiceScreen extends Activity implements OnFocusChangeListener,
    OnTouchListener, OnGestureListener ....

レイアウトリスナー- _

RelativeLayout rlCarBrand;
    ....

    rlCarBrand.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub
            return gestureScanner.onTouchEvent(event);
        }
    });

オーバーライドされたメソッド-

@Override
public boolean onFling(MotionEvent arg0, MotionEvent arg1, float arg2,
        float arg3) {
    // TODO Auto-generated method stub
    Log.i("LogMessage", "On Fling");
    return true;
}


@Override
public boolean onDown(MotionEvent arg0) {
    // TODO Auto-generated method stub
    return true;
}
4

2 に答える 2

1

ScrollView を拡張する CustomScrollView クラスを作成します。

これにより、Scrollview の scrolling enabled プロパティを変更できます。

public class CustomScrollView extends ScrollView {

    boolean bScrollable = false;

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


    public void setScrollingEnabled(boolean enabled) {
        bScrollable = enabled;
    }

    public boolean isScrollable() {
        return bScrollable;
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
        case MotionEvent.ACTION_DOWN:
            // if we can scroll pass the event to the superclass
            if (bScrollable) {
                return super.onTouchEvent(ev);
            }

            // only continue to handle the touch event if scrolling enabled
            return bScrollable; // mScrollable is always false at this point

        default:
            return super.onTouchEvent(ev);
        }
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        // Don't do anything with intercepted touch events if
        // we are not scrollable
        if (!bScrollable) {
            return false;
        } else {
            return super.onInterceptTouchEvent(ev);
        }
    }

}
于 2013-03-29T05:33:22.230 に答える
1

ScrollView クラスを拡張して、これらの onDown と onFling をオーバーライドしてみてください。このようなもの

@Override
public boolean onFling(MotionEvent arg0, MotionEvent arg1, float arg2,
    float arg3) {
    super.onFling(arg0,arg1,arg2,arg3);   
    return false;
}

これが機能するかどうかを確認してください。

ポイントは、ジェスチャー イベントを消費している scrollview メソッドから false を返すことです。もっとググって。私はそれについて確信が持てません。

于 2013-02-18T11:12:18.977 に答える