Android: implement touch api

This commit is contained in:
王劲鹏 2021-09-22 15:30:46 +08:00 committed by osborn
parent 0421b8258f
commit 56bf3bb4a1

View File

@ -52,6 +52,11 @@ public class GestureContainerNode extends StackNode {
} }
} }
private String onTouchDown;
private String onTouchMove;
private String onTouchUp;
private String onTouchCancel;
private String onSingleTap; private String onSingleTap;
private String onDoubleTap; private String onDoubleTap;
private String onLongPress; private String onLongPress;
@ -113,6 +118,30 @@ public class GestureContainerNode extends StackNode {
} else { } else {
onSwipe = null; onSwipe = null;
} }
} else if ("onTouchDown".equals(name)) {
if (prop.isString()) {
onTouchDown = prop.asString().value();
} else {
onTouchDown = null;
}
} else if ("onTouchMove".equals(name)) {
if (prop.isString()) {
onTouchMove = prop.asString().value();
} else {
onTouchMove = null;
}
} else if ("onTouchUp".equals(name)) {
if (prop.isString()) {
onTouchUp = prop.asString().value();
} else {
onTouchUp = null;
}
} else if ("onTouchCancel".equals(name)) {
if (prop.isString()) {
onTouchCancel = prop.asString().value();
} else {
onTouchCancel = null;
}
} else { } else {
super.blend(view, name, prop); super.blend(view, name, prop);
} }
@ -230,13 +259,26 @@ public class GestureContainerNode extends StackNode {
@Override @Override
public boolean onTouchEvent(MotionEvent event) { public boolean onTouchEvent(MotionEvent event) {
// handle touch event conflict when in a scroll view or other similar containers // handle touch event conflict when in a scroll view or other similar containers
switch (event.getAction()) { switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (onTouchDown != null)
callJSResponse(onTouchDown, DoricUtils.px2dp(event.getX()), DoricUtils.px2dp(event.getY()));
break;
case MotionEvent.ACTION_MOVE: case MotionEvent.ACTION_MOVE:
getParent().requestDisallowInterceptTouchEvent(true); getParent().requestDisallowInterceptTouchEvent(true);
if (onTouchMove != null)
callJSResponse(onTouchMove, DoricUtils.px2dp(event.getX()), DoricUtils.px2dp(event.getY()));
break; break;
case MotionEvent.ACTION_UP: case MotionEvent.ACTION_UP:
if (onTouchUp != null)
callJSResponse(onTouchUp, DoricUtils.px2dp(event.getX()), DoricUtils.px2dp(event.getY()));
case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_CANCEL:
getParent().requestDisallowInterceptTouchEvent(false); getParent().requestDisallowInterceptTouchEvent(false);
if (onTouchCancel != null)
callJSResponse(onTouchCancel, DoricUtils.px2dp(event.getX()), DoricUtils.px2dp(event.getY()));
break; break;
} }