-1

我正在为盲人实现一个应用程序,我想知道如何使用滚动视图仅从屏幕右侧滚动。(屏幕的其余部分将无法滚动按钮手指扫描)。

4

2 回答 2

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,他们不会理解您要做什么。我不建议你这样做。

于 2013-07-26T21:01:15.677 回答
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>
于 2013-07-26T21:09:04.220 回答