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