用水平滚动视图在里面滑动标签

时间:2014-02-26 09:39:07

标签: android android-fragments android-viewpager horizontalscrollview

我正在尝试在可滑动标签的片段中使用Horizo​​ntalScrollViews - ViewPager。

我的想法是,当您从右向左滑动手指时,首先将Horizo​​ntalScrollView向右滚动,当它到达边缘时,viewpager开始滑动到下一个标签。

如果我尝试直接制作(只需将Horizo​​ntalScrollView放入),则首先使用Horizo​​ntalScrollView获取事件并滚动一点(5-10像素),然后viewpager捕获事件并开始滑动。

我尝试扩展Horizo​​ntalScrollView以防止viewpager在滚动时捕获事件,但是当它到达边缘时我无法“拦截”它以便开始滑动。

我的CustomHorizo​​ntalScrollView:

public class CustomHorizontalScrollView extends HorizontalScrollView {
    private boolean scrolling = false;


    @Override
    public boolean onInterceptTouchEvent (MotionEvent event){
        if(!isOnLeftEdge() && !isOnRightEdge()){
            getParent().requestDisallowInterceptTouchEvent(true);
        }

        return super.onInterceptTouchEvent(event);
    }
    @Override
    public boolean onTouchEvent (MotionEvent event){
        if(!isOnLeftEdge() && !isOnRightEdge()){
            getParent().requestDisallowInterceptTouchEvent(true);
        }

        if(!scrolling)
            getParent().requestDisallowInterceptTouchEvent(true);

        if(event.getActionMasked() == MotionEvent.ACTION_MOVE)
            scrolling = true;
        else if(event.getActionMasked() == MotionEvent.ACTION_UP)
            scrolling = false;

        return super.onTouchEvent(event);
    }


    private boolean isOnLeftEdge(){
        return getScrollX() == 0;
    }
    private boolean isOnRightEdge(){
        return getChildAt(0).getRight() == getWidth()+getScrollX();
    }
}

无论如何我能做到吗?

=================编辑======================

我试图在一个简单的项目中重新创建问题。 API 18 - >空白活动 - >导航类型:固定标签+滑动。

然后我创建一个测试片段:

<?xml version="1.0" encoding="utf-8"?>
<com.example.provesandroid.CustomHorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout 
        android:layout_width="wrap_content"
        android:layout_height="match_parent">

        <ImageView
            android:layout_width="500dp"
            android:layout_height="500dp"
            android:contentDescription=""
            android:scaleType="fitXY"
            android:src="@drawable/ic_launcher" />

    </LinearLayout>

</com.example.provesandroid.CustomHorizontalScrollView>

我编辑MainActivity以放置新片段而不是默认片段:

public static class DummySectionFragment extends Fragment {
    /**
     * The fragment argument representing the section number for this
     * fragment.
     */
    public static final String ARG_SECTION_NUMBER = "section_number";

    public DummySectionFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.sv_fragment,
                container, false);

        return rootView;
    }
}

ScrollView

public class CustomHorizontalScrollView extends HorizontalScrollView {

    public CustomHorizontalScrollView(Context context) {
        super(context);
    }
    public CustomHorizontalScrollView(Context context, AttributeSet attr) {
        super(context, attr);
    }
    public CustomHorizontalScrollView(Context context, AttributeSet attr, int defStyle) {
        super(context, attr, defStyle);
    }

    @Override
    public boolean onTouchEvent (MotionEvent event){
        if(event.getActionMasked() == MotionEvent.ACTION_DOWN)
            getParent().requestDisallowInterceptTouchEvent(true);

        return super.onTouchEvent(event);
    }
}

现在这很奇怪,因为使用默认的HorizontalScrollView标签之间的滑动会随机发生。我认为它与速度或手指运动有关。

但是,正如我在评论中所说的那样,使用新标签时,标签之间的滑动根本不会发生。

0 个答案:

没有答案