HeM*_*odd 2 android scrollview
我觉得这个问题已经有了答案,但我找不到答案.
我的布局中有一个ScrollView,它包含各种可点击的视图.
在特定条件下,我想禁用ScrollView及其所有子项的点击和事件.
以下没有帮助:
ScrollView.setEnabled(false)
ScrollView.setClickable(false)
ScrollView.setOnTouchListener(null)
Run Code Online (Sandbox Code Playgroud)
以及:
(parent view of the ScrollView).requestDisallowInterceptTouchEvent()
Run Code Online (Sandbox Code Playgroud)
我用以下代码创建了一个自定义ScrollView:
public class StoppableScrollView extends ScrollView
{
private static boolean stopped = false;
public StoppableScrollView(Context context)
{
super(context);
}
public StoppableScrollView(Context context, AttributeSet attrs)
{
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev)
{
if(stopped)
{
return true;
}
else
{
super.onInterceptTouchEvent(ev);
return false;
}
}
@Override
public boolean onTouchEvent(MotionEvent ev)
{
if(stopped)
{
return true;
}
else
{
super.onTouchEvent(ev);
return false;
}
}
public static void setStopped(boolean inBool)
{
stopped = inBool;
}
public static boolean getStopped()
{
return stopped;
}
}
Run Code Online (Sandbox Code Playgroud)
仅使用onTouchEvent()将停止滚动,但不会单击子视图.
仅使用onInterceptTouchEvent()使得点击工作时滚动不会,反之亦然.
同时使用onTouchEvent()和onInterceptTouchEvent()可以在停止时为'true'成功停止对子视图的不必要点击,但无论停止状态如何,它都会禁用滚动.
有没有更简单的方法来获取此行为,或者有没有办法修改StoppableScrollView类,以便它将正确处理这些触摸事件?
可能应该帮助的是以下(因为我有类似的问题):
在ScrollView中,您应该将RelativeLayout作为主子进程(ScrollView无论如何只接受1个主子进程).这个RelativeLayout当然应该是两个方向上的fill_parent.
在真正结束的RelativeLayout(所有其他的孩子后),你可以把现在用透明背景(#00FFFFFF),这也FILL_PARENT在两个方向上的LinearLayout.此LinearLayout应具有Visibility = View.GONE(默认情况下)您还必须将空的OnClickListener附加到它.现在,因为zOrder如果你使这个LinearLayout Visibility = View.Visible它将捕获所有事件并避免点击上面的孩子!
| 归档时间: |
|
| 查看次数: |
2766 次 |
| 最近记录: |