在scrollview中从右侧滚动

时间:2013-07-26 20:53:44

标签: android

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

2 个答案:

答案 0 :(得分: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,他们将无法理解您正在尝试做什么。我不建议你这样做。

答案 1 :(得分: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>