0

我有一个脚蹼:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/ParentLayout"
    xmlns:android="http://schemas.android.com/apk/res/android" style="@style/MainLayout" >
            <LinearLayout android:id="@+id/FlipperLayout" style="@style/FlipperLayout">
                <ViewFlipper android:id="@+id/viewflipper" style="@style/ViewFlipper">
                    <!--adding views to ViewFlipper-->
                    <include layout="@layout/home1" android:layout_gravity="center_horizontal" />
                    <include layout="@layout/home2" android:layout_gravity="center_horizontal" />
                </ViewFlipper>
            </LinearLayout>
</LinearLayout>

第一个布局home1包含一个滚动视图。我应该如何区分翻转手势和滚动?目前:

  • 如果我删除滚动视图,我可以滑动
  • 如果我添加滚动视图,我只能滚动。

我看到一个建议我应该重写 onInterceptTouchEvent(MotionEvent),但我不知道该怎么做。此刻,我的代码如下所示:

public class HomeActivity extends Activity {
-- declares
@Override
public void onCreate(Bundle savedInstanceState) {
    -- declares & preliminary actions

    LinearLayout layout = (LinearLayout) findViewById(R.id.ParentLayout);
    layout.setOnTouchListener(new OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
            if (gestureDetector.onTouchEvent(event)) {
                return true;
            }
            return false;
        }});

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    gestureDetector.onTouchEvent(event); 
    return true;
    }
class MyGestureDetector extends SimpleOnGestureListener {
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
    // http://www.codeshogun.com/blog/2009/04/16/how-to-implement-swipe-action-in-android/
    }
}

}

有人可以指导我正确的方向吗?

谢谢你。

4

3 回答 3

1

视图翻转器一次只显示一个视图,如此处所述。当开发人员想要让用户选择如何查看数据(列表、缩略图等)时,这是一种非常有用的开关。因此,您不能同时滚动和翻转的原因是因为一个视图仅滚动,而另一个视图仅翻转,并且一次仅打开一个视图。

如果您希望您的显示既可以滚动又可以翻转,您将必须设计一个能够同时进行的布局并覆盖所需的方法。第一步是删除您的 ViewFLipper 并使用其他东西。

希望这有帮助!

于 2010-06-13T14:46:29.657 回答
1

Basically, if you have a ScrollView in a ViewFlipper, all you have to do is attach onTouchListener to the ScrollView:

    ScrollView scrollView = (ScrollView) findViewById(R.id.scrollView);        
    scrollView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event){
            if (myGestureDetector.onTouchEvent(event)){
                return true;
            }
            else{   
                return false;
            }
        }
    });
于 2011-06-03T18:21:08.560 回答
0

我尝试这种方式使其工作:

@Override
public boolean onTouchEvent(MotionEvent event) 
{
    scrollView.onTouchEvent(event); 
    return super.onTouchEvent(event);
}

@Override
public boolean dispatchTouchEvent(MotionEvent e)
{
    gestureDetector.onTouchEvent(e);
    return super.dispatchTouchEvent(e);
}
于 2013-12-19T13:09:24.223 回答