我的 Action_DOWN 和我的 Scrollview 之间的冲突
Conflict between my Action_DOWN and my Scrollview
正如您在此 image 上看到的,我有一个灰色区域,其中有一些图像视图。该区域是水平滚动视图内的 LinearLayout。此外,在每个图像视图上,都有一个 OnTouchListener,它在 ACTION_DOWN.
时开始拖放
如您所知,我尝试滚动时出现问题。事实上,ACTION_DOWN 是 "selected" 所以我不能 scroll .
所以我想了几个解决办法:
- 放置更高的区域,用户可以在没有任何内容的地方滚动。
- 不使用 OnTouchListener,而是使用 OnLongClickListener
但是 none 这些解决方案对我有好处。您知道如何解决我的问题吗?
我的xml代码:
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.1"
android:background="#5d6164"
android:id="@+id/horizontalScrollView" >
<LinearLayout
android:id="@+id/area2_timetable"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:gravity="center">
</LinearLayout>
</HorizontalScrollView>
我的 OnTouch 方法:
View.OnTouchListener myOnTouchListener = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
if (action==MotionEvent.ACTION_DOWN)
{
SharedPreferences mSharedPrefs = getSharedPreferences("User", Context.MODE_PRIVATE);
if(mSharedPrefs.getInt("son_active", 0)==1) Son(VariablesManagement.nom_stockage_meal.get(v.getId()));
ClipData data = ClipData.newPlainText("", "");
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
v.startDrag(data, shadowBuilder, v, 0);
}
return false;
}
};
我认为我的 java 代码没有用,所以我没有放它(为了有一个明确的问题)但如果您认为它有帮助,请不要犹豫。
非常感谢!
您需要区分垂直和水平滑动。
尝试如下:
private float y1, y2;
//Adjust this threshold as your need
private static final int MIN_DISTANCE = 20;
View.OnTouchListener myOnTouchListener = new View.OnTouchListener() {
public boolean onTouch(final View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
y1 = event.getY();
break;
case MotionEvent.ACTION_MOVE:
y2 = event.getY();
float deltaY = y2 - y1;
if (Math.abs(deltaY) > MIN_DISTANCE) {
ClipData data = ClipData.newPlainText("", "");
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
v.startDrag(data, shadowBuilder, v, 0);
Toast.makeText(getActivity(), "Swiping vertically!", Toast.LENGTH_SHORT).show();
} else {
// Nothing to do
}
break;
}
return false;
}
};
正如您在此 image 上看到的,我有一个灰色区域,其中有一些图像视图。该区域是水平滚动视图内的 LinearLayout。此外,在每个图像视图上,都有一个 OnTouchListener,它在 ACTION_DOWN.
时开始拖放如您所知,我尝试滚动时出现问题。事实上,ACTION_DOWN 是 "selected" 所以我不能 scroll .
所以我想了几个解决办法:
- 放置更高的区域,用户可以在没有任何内容的地方滚动。
- 不使用 OnTouchListener,而是使用 OnLongClickListener
但是 none 这些解决方案对我有好处。您知道如何解决我的问题吗?
我的xml代码:
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.1"
android:background="#5d6164"
android:id="@+id/horizontalScrollView" >
<LinearLayout
android:id="@+id/area2_timetable"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:gravity="center">
</LinearLayout>
</HorizontalScrollView>
我的 OnTouch 方法:
View.OnTouchListener myOnTouchListener = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
if (action==MotionEvent.ACTION_DOWN)
{
SharedPreferences mSharedPrefs = getSharedPreferences("User", Context.MODE_PRIVATE);
if(mSharedPrefs.getInt("son_active", 0)==1) Son(VariablesManagement.nom_stockage_meal.get(v.getId()));
ClipData data = ClipData.newPlainText("", "");
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
v.startDrag(data, shadowBuilder, v, 0);
}
return false;
}
};
我认为我的 java 代码没有用,所以我没有放它(为了有一个明确的问题)但如果您认为它有帮助,请不要犹豫。
非常感谢!
您需要区分垂直和水平滑动。
尝试如下:
private float y1, y2;
//Adjust this threshold as your need
private static final int MIN_DISTANCE = 20;
View.OnTouchListener myOnTouchListener = new View.OnTouchListener() {
public boolean onTouch(final View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
y1 = event.getY();
break;
case MotionEvent.ACTION_MOVE:
y2 = event.getY();
float deltaY = y2 - y1;
if (Math.abs(deltaY) > MIN_DISTANCE) {
ClipData data = ClipData.newPlainText("", "");
View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
v.startDrag(data, shadowBuilder, v, 0);
Toast.makeText(getActivity(), "Swiping vertically!", Toast.LENGTH_SHORT).show();
} else {
// Nothing to do
}
break;
}
return false;
}
};