【问题标题】:ScrollView within ViewFlipper does not work although using onTouchEvent尽管使用 onTouchEvent,但 ViewFlipper 中的 ScrollView 不起作用
【发布时间】:2013-08-06 16:22:01
【问题描述】:

在这篇文章中: Android: ScrollView in flipper

建议为 ScrollView 设置一个 onTouchnListener,它是 ViewFlipper 的子项的一部分。

我这样做了,也使用了相同的逻辑:

    public class MainActivity extends Activity implements OnGestureListener {

// ...

@Override
protected void onCreate(Bundle savedInstanceState) {
    // ...

    this.gestureDetector = new GestureDetector(this);

    // ..

           createViews();
}


private void createViews() {

    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            displayView = inflater.inflate(R.layout.viewflippercontent, null);

    ScrollView scrollView = (ScrollView) displayView
            .findViewById(R.id.scrollview);

    scrollView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
             if (gestureDetector.onTouchEvent(event)) {
                Log.d("ScrollViewOnTouchListener", "true");                 
                return true;
            } else {
                Log.d("ScrollViewOnTouchListener", "false");
                return false;                       
            }
        }
    });

    // ..
}


@Override
public boolean onTouchEvent(MotionEvent me) {
    Log.d("onTouchEvent", "onTouchEvent");
    return gestureDetector.onTouchEvent(me);
}

public boolean onDown(MotionEvent e) {
    return true;
}

public void onLongPress(MotionEvent e) {
}

public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
        float distanceY) {
    Log.d("onScroll", "onScroll");
    return false;
}

public void onShowPress(MotionEvent e) {
}

public boolean onSingleTapUp(MotionEvent e) {
    return true;
}

}

当我在 ViewFlipper 的子项中滚动时,我在 LogCat 中得到以下信息:


08-07 21:57:14.581:调试/ScrollViewOnTouchListener(4586):真

08-07 21:57:14.591:调试/ScrollViewOnTouchListener(4586):假

08-07 21:57:14.622:调试/ScrollViewOnTouchListener(4586):假

08-07 21:57:14.646: 调试/onScroll(4586): onScroll

08-07 21:57:14.646: 调试/ScrollViewOnTouchListener(4586): false

08-07 21:57:14.671: 调试/onScroll(4586): onScroll

08-07 21:57:14.671: 调试/ScrollViewOnTouchListener(4586): false

08-07 21:57:14.704: 调试/onScroll(4586): onScroll

08-07 21:57:14.704:调试/ScrollViewOnTouchListener(4586):假

08-07 21:57:14.731: 调试/onScroll(4586): onScroll

08-07 21:57:14.731: 调试/ScrollViewOnTouchListener(4586): false

08-07 21:57:14.761: 调试/onScroll(4586): onScroll

08-07 21:57:14.761:调试/ScrollViewOnTouchListener(4586):假

08-07 21:57:14.791: 调试/onScroll(4586): onScroll

08-07 21:57:14.791:调试/ScrollViewOnTouchListener(4586):假

08-07 21:57:14.791:调试/ScrollViewOnTouchListener(4586):真


虽然内容比屏幕大,但应该可以滚动,但不会发生滚动。

我做错了什么?

【问题讨论】:

    标签: android scrollview viewflipper touch-event


    【解决方案1】:

    我认为您的问题与此帖子中的问题相似:Scrollview doesn't swipe when it's too short to scroll

    看看提出的解决方案,作者扩展了 ScrollView 视图类。我相信这会解决你的问题

    【讨论】:

      【解决方案2】:

      在此链接找到解决方案 -> Fragment using ScrollView inside RelativeLayout > ontouch doesn't work

      将以下代码添加到滚动视图内的视图中

      android:clickable="true"
          android:focusable="true"
          android:focusableInTouchMode="true"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-17
        • 2017-01-11
        相关资源
        最近更新 更多