У меня есть проблема с использованием GestureDetector и интерактивного RelativeLayout в одно и то же время. Когда мой RelativeLayout не доступен для клика, приложение распознает каждый жест отлично, но когда я устанавливаю макет для кликабеля, приложение не повторяет жесты. Можно ли использовать оба метода одновременно?Использование GestureDetector и clickable RelativeLayout
0
A
ответ
0
К сожалению, onClick() & onTouch() не может нормально себя вести при использовании вместе. Я использую обход для обнаружения щелчка с помощью onTouch. Я не уверен, как он будет вести себя с детектором жестов. Я поделюсь своим кодом .. Он отлично работает без детектора жестов. Дайте мне знать, если он не работает.
Initializing слушатели:
GestureDetector gdt;
View.OnTouchListener touchListener;
private void initializeListener()
{
gdt = new GestureDetector(mContext,new GestureListener());
touchListener = new View.OnTouchListener() {
float startX;
float startY;
float CLICK_ACTION_THRESHOLD = 5;
//Uses the touched coordinates recorded through MOTION_DOWN & MOTION_UP to detect whether the action performed was a click
private boolean isAClick(float startX, float endX, float startY, float endY) {
if(isLoadingView)
return false;
float differenceX = Math.abs(startX - endX);
float differenceY = Math.abs(startY - endY);
return !(differenceX > CLICK_ACTION_THRESHOLD || differenceY > CLICK_ACTION_THRESHOLD);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
startX = event.getX();
startY = event.getY();
break;
case MotionEvent.ACTION_UP: {
float endX = event.getX();
float endY = event.getY();
if (isAClick(startX, endX, startY, endY))
{
switch (v.getId())
{
case R.id.view_id:
break
}
}
}
break;
}
gdt.onTouchEvent(event);
return true;
}
};
}
Добавить Слушатель в просмотры:
private void addTouchListenerToView(View v) {
v.setOnTouchListener(touchListener);
}
Пример класс Жест Слушатель:
private class GestureListener extends GestureDetector.SimpleOnGestureListener {
private final int SWIPE_MIN_DISTANCE = 153;
private final int SWIPE_THRESHOLD_VELOCITY = 20;
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY)
{
return false; // Right to left
}
else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE) //&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY)
{
return false; // Left to right
}
if(e1.getY() - e2.getY() > SWIPE_MIN_DISTANCE)// && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY)
{
return false; // Bottom to top
}
else if (e2.getY() - e1.getY() > SWIPE_MIN_DISTANCE)// && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY)
{
return false; // Top to bottom
}
return true;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE*10) //&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY)
{
return false; // Right to left
}
else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE*10) //&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY)
{
return false; // Left to right
}
return true;
}
}
Смежные вопросы
- 1. Android RelativeLayout clickable overlay view
- 2. Использование onTouchEvent в GestureDetector
- 3. GestureDetector onFling
- 4. Использование RelativeLayout
- 5. LinearLayout и GestureDetector
- 6. GestureDetector и GestureDetectorCompat
- 7. Производительность GestureOverlayView и GestureDetector
- 8. Android: правильное использование RelativeLayout
- 9. Xamarin Forms RelativeLayout Использование
- 10. Использование RelativeLayout снаружи CoordinatorView
- 11. Корректное использование RelativeLayout
- 12. Xamarin GestureDetector OnFling и ListView
- 13. Google Glass gestureDetector и setBaseListener
- 14. GestureDetector и InputListener в libgdx
- 15. Использование константы и фактора в Xamarin.Forms RelativeLayout?
- 16. GestureDetector не работает
- 17. Создание кнопки отправки clickable и не clickable
- 18. Динамически RelativeLayout и интерактивные
- 19. Использование RelativeLayout вместо вложенных весов
- 20. android: clickable не работает
- 21. сделать popupWindow TextView clickable?
- 22. Использовать ScaleGestureDetector с GestureDetector?
- 23. Замена Устаревшее GestureDetector конструктор
- 24. Disable GestureDetector в действии
- 25. GestureDetector в TYPE_SYSTEM_OVERLAY
- 26. GestureDetector не работает
- 27. реализовать GestureDetector для ImageView
- 28. RelativeLayout, содержащий веб-просмотр и другое relativelayout
- 29. GestureDetector в libgdx
- 30. GestureDetector внутри NativeActivity