2013-07-26 20 views
-1

我正在實現一個應用程序的盲目,我想知道如何使用滾動視圖只能從屏幕的右側滾動。 (屏幕的其餘部分將不可滾動 - 用於按鈕手指掃描)。在滾動視圖中從右側滾動

回答

0

您可以擴展ListView並覆蓋onTouchEvent(MotionEvent ev)方法。

然後,如果用戶嘗試在不希望他們滾動的部分滾動中進行滾動,則會執行邏輯攔截事件,並且不會將它傳遞給ListView。

這很難做到。也許還有另一種更簡單的方法。

不管怎麼說,這是一個例子:

@Override 
public boolean onTouchEvent(MotionEvent ev) { 

    final int action = ev.getAction(); 
    final int x = (int) ev.getX(); 
    final int y = (int) ev.getY(); 

    if (action == MotionEvent.ACTION_DOWN && x < getWidth()/7 && (selectableFromTheBeginning || actionMode != null)) { 
     selectionMode = true; 
     startPosition = pointToPosition(x, y); 
    } 
    if (!selectionMode){ 
     return super.onTouchEvent(ev); 
    } 

    switch (action) { 
     case MotionEvent.ACTION_DOWN: 
      break; 
     case MotionEvent.ACTION_MOVE: 
      if (pointToPosition(x, y) != startPosition) 
       selectionMode = false; 
      break; 
     case MotionEvent.ACTION_CANCEL: 
     case MotionEvent.ACTION_UP: 
     default: 
      selectionMode = false; 

      int itemPosition = pointToPosition(x, y); 
      if (startPosition != ListView.INVALID_POSITION && isSelectable(itemPosition)){ 
       setItemChecked(itemPosition, !isItemChecked(itemPosition)); 
      } 

    } 

    return true; 
} 

使用這種實現,我正在做一些邏輯來讓用戶選擇只是在項目的左側點擊ListView中的元素。如果你沒有找到另一種方法,你可以嘗試瞭解如何實現這種方法。

但我給你一個建議:你不應該以這種方式破壞用戶體驗。用戶會嘗試以正常的方式滾動你的ListView,他們不會理解你想要做什麼。我不會推薦你這樣做。

0

您可以將ScrollView放置在佈局的任何位置。所以如果你有一個LinearLayout分割屏幕,你可以把ScrollView放在一個部分,只要確保它有另一個Layout作爲子對象,因爲它只能有一個子對象。如果你的按鈕區域應該覆蓋ScrollView的一部分,你可以使用RelativeLayout作爲外部佈局,在這種情況下,首先將ScrollView添加到你的佈局中,並將下一個佈局部分地添加到上面。例如

<RelativeLayout ...> 
    <ScrollView android:marginLeft="100dp" android:layoutWidth="match_parent" ...> 
      <LinearLayout .../> 
    </ScrollView> 
    <LinearLayout android:alignParentLeft="true" android:marginRight="200dp" .../> 
</RelativeLayout>