2012-08-22 74 views
13

我有多個Horizo​​ntalScrollViews裏面的ScrollView。水平滾動根本不流暢。爲了滾動工作,我必須水平滾動。有一個簡單的修復來調整這個?謝謝!Android:Horizo​​ntalScrollView裏面滾動查看

Multiple HorizontalScrollViews inside a single ScrollView

+0

我試圖實現類似的用戶界面。但是,我的滾動視圖不平滑,並在滾動時凍結。你在項目中遇到過類似的問題嗎?謝謝! – gauravsapiens

+0

你有onClickListener()嗎? – vladexologija

+0

是的,Horizo​​ntalListView的內部適配器! – gauravsapiens

回答

7

如果您正在使用從水平滾動視圖的解決方案可以使用回收站視圖交錯佈局管理器

StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.HORIZONTAL); 

RecyclerViewAdapter recyclerViewAdapter = newRecyclerViewAdapter(this); 

recyclerView.setAdapter(recyclerViewAdapter); //Don't miss to initialize your adapter 
+0

對不起,我認爲該網址就夠了? –

+3

@yousefsafwat **否** ...鏈接永遠不會*足夠。您必須在此網站上發佈答案的重要部分。 –

+0

這個想法是把水平列表視圖裏面的垂直列表視圖 –

0

一般情況下,你不應該使用在Android的嵌套ScrollViews可言,這樣滾動的行爲是不自然了。

您可能想重新考慮您的佈局設計,是否有任何無法通過展開列表實現的設計?

+0

如果你對此有100%的堅持,可以看看下面的解決方案:http://stackoverflow.com/questions/2646028/android-horizo​​ntalscrollview-within-scrollview-touch-handling?rq= 1 – Guykun

+0

我試圖實現這種模式:http://www.androidpatterns.com/uap_pattern/scrollable-rows – vladexologija

2

我找到了解決方案,仍然無法相信這是你必須做的,使這項工作正常!只需添加空白onClickListener到每個項目中Horizo​​ntalScrollView

item.setOnClickListener(new OnClickListener() {   
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
     } 
    }); 

後這張幻燈片是真的光滑,向上下兩個方向。

+1

如果這種情況下,你可以把'android:clickable =「true」'放在你的列表項中XML,而不是在代碼中。 – ataulm

4

該類創建一個包含Horizo​​ntalScrollView的ScrollView,組合成一個類。您可以使用AddChild()方法將內容放入其中。 dispatchTouchEvent覆蓋保持滾動平滑,因此您可以使用手指的單個幻燈片進行平移。

(我最近使用這種包裝一個編程方式創建的TextView)

class MultiScrollView extends ScrollView 
{   
public HorizontalScrollView hscroll; 

public MultiScrollView (Context context) 
{ 
    super(context); 
} 

public void AddChild(View child) 
{            
    hscroll.addView(child); 
} 

@Override 
public boolean dispatchTouchEvent(MotionEvent event) 
{ 
    hscroll.dispatchTouchEvent(event); 
    onTouchEvent(event); 
    return true; 
} 
} 
+0

戴維百萬感謝它的魅力。 –

2

http://www.dev-smart.com/archives/34滾動視圖列表視圖之間的交叉焦點問題的解決方案阻止了焦點到滾動視圖一旦你專注於列表視圖。

從技術角度來看,您應該將以下行添加到Horizo​​ntalListView類中的onScroll函數中。

getParent().requestDisallowInterceptTouchEvent(true); 

希望這會有所幫助。

0

雖然David的答案有效,但它有一個缺點。它將ScrollView的MotionEvent對象直接傳遞給Horizo​​ntalScrollView.onTouchEvent(),因此如果Horizo​​ntalScrollView或其子級嘗試獲取事件座標,則會得到基於ScrollView的錯誤座標。

我的解決辦法:

public class CustomScrollView extends ScrollView{ 

    /*************skip initialization*************/ 

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent e){ 
     //returning false means ScrollView is not interested at any events, 
     //so ScrollView's onTouchEvent() won't be called, 
     //and all of the events will be passed to ScrollView's child 
     return false; 
    } 

    @Override 
    public boolean dispatchTouchEvent(MotionEvent ev) { 
     //manually call ScrollView's onTouchEvent(), 
     //the vertical scrolling happens there. 
     onTouchEvent(ev); 
     //dispatch the event, 
     //ScrollView's child will have every event. 
     return super.dispatchTouchEvent(ev); 
    } 
} 

就環繞Horizo​​ntalScrollView這CustomScrollView在你的佈局文件。

相關問題