Android:脚蹼中的ScrollView

时间:2010-06-13 14:19:29

标签: android scroll flip

我有一个鳍状肢:

    <?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/
    }
}

}

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

谢谢。

3 个答案:

答案 0 :(得分:1)

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

如果您希望显示器同时滚动和显示,则必须设计一个能够同时显示的布局并覆盖所需的方法。迈出这一步的第一步是删除你的ViewFLipper并使用别的东西。

希望这有用!

答案 1 :(得分:1)

基本上,如果ViewFlipper中有ScrollView,您只需将onTouchListener附加到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;
            }
        }
    });

答案 2 :(得分: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);
}