2014-01-05 55 views
0

我有一個ViewPager組件,其中包含2個由FragmentStatePagerAdapter適配器控制的片段。在每個片段中都有一個包含各種按鈕Horizo​​ntalScrollView的內容。我想要實現的是當用戶滾動(水平)Horizo​​ntalScrollView時,ViewPager不會對此手勢做出反應。但是當用戶拖拽剩餘的片段內容時,它會像往常一樣翻頁。如果在片段中存在Horizo​​ntalScrollView,則禁用ViewPager的滾動

如何爲Horizo​​ntalScrollView制定一個例外,以便不將滾動手勢傳播給ViewPager?盒子裏有某種解決方案嗎?

+0

看到ViewGroup.requestDisallowInterceptTou chEvent – pskink

回答

0

當用戶試圖滾動HorizontalScrollView時,擴展ViewPager並覆蓋canScroll()返回true

例如,這裏是類似的代碼,用於檢測滾動表示爲SurfaceView在地圖上:

/*** 
    Copyright (c) 2013 CommonsWare, LLC 
    Licensed under the Apache License, Version 2.0 (the "License"); you may not 
    use this file except in compliance with the License. You may obtain a copy 
    of the License at http://www.apache.org/licenses/LICENSE-2.0. Unless required 
    by applicable law or agreed to in writing, software distributed under the 
    License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
    OF ANY KIND, either express or implied. See the License for the specific 
    language governing permissions and limitations under the License. 

    From _The Busy Coder's Guide to Android Development_ 
    http://commonsware.com/Android 
*/ 

package com.commonsware.android.mapsv2.pager; 

import android.content.Context; 
import android.support.v4.view.PagerTabStrip; 
import android.support.v4.view.ViewPager; 
import android.util.AttributeSet; 
import android.view.SurfaceView; 
import android.view.View; 

public class MapAwarePager extends ViewPager { 
    public MapAwarePager(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    } 

    @Override 
    protected boolean canScroll(View v, boolean checkV, int dx, int x, 
           int y) { 
    if (v instanceof SurfaceView || v instanceof PagerTabStrip) { 
     return(true); 
    } 

    return(super.canScroll(v, checkV, dx, x, y)); 
    } 
} 
相關問題