NativeActivity
클래스 내에 GestureDetector
을 사용하고 싶지만 작동하지 않는 것 같습니다. NativeActivity
앱에 GestureDetector
을 사용할 수 있습니까? 내 코드는 다음과 같다 :NativeActivity 내의 GestureDetector
public class HollywoodActivity extends android.app.NativeActivity {
private GestureDetector mGestureDetector;
private View.OnTouchListener mGestureListener;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mGestureDetector = new GestureDetector(new MyGestureDetector());
mGestureListener = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
Log.i("DEBUG", "*** TOUCH VIEW ***");
return mGestureDetector.onTouchEvent(event);
}
};
}
private class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
Log.i("DEBUG", "FLING" + velocityX + " " + velocityY);
return true;
}
@Override
public boolean onDown(MotionEvent e) {
Log.i("DEBUG", "ON DOWN");
return true;
}
}
}
,도 onTouch()
,도 onFling()
도 onDown()
이제까지 전화를받을. 여기에 명백한 내용이 누락되었거나 과 NativeActivity
을 사용할 수 없습니까?
감사
편집 : 그것은 그들이 C 측에 전달되기 전에 자바 측 MotionEvents을 차단하는 것이 가능하지 않는 것, 나는 이제 다른 방법으로 라운드를 시도했습니다 : 나는 C 측의 AINPUT_EVENT_TYPE_MOTION을 얻을 때마다, 나는이 같은 JNI를 통해 자바 측의 GestureDetector 이 먹이 해요 :
(*env)->CallVoidMethod(env, g_android->activity->clazz, (*env)->GetMethodID(env, globalMyNativeActivityClass, "runGestureDetector", "(JJIIFFFFIFFII)V"), AMotionEvent_getDownTime(event), AMotionEvent_getEventTime(event), AMotionEvent_getAction(event), AMotionEvent_getPointerCount(event), AMotionEvent_getRawX(event, 0), AMotionEvent_getRawY(event, 0), AMotionEvent_getPressure(event, 0), AMotionEvent_getSize(event, 0), AMotionEvent_getMetaState(event), AMotionEvent_getXPrecision(event), AMotionEvent_getYPrecision(event), AInputEvent_getDeviceId(event), AMotionEvent_getEdgeFlags(event));
자바 방법 runGestureDetector() 단순히 D 그럼이 다음 :
public void runGestureDetector(long downTime, long eventTime, int action, int pointerCount, float x, float y, float pressure, float size, int metaState, float xPrecision, float yPrecision, int deviceId, int edgeFlags) {
mGestureDetector.onTouchEvent(MotionEvent.obtain(downTime, eventTime, action, pointerCount, x, y, pressure, size, metaState, xPrecision, yPrecision, deviceId, edgeFlags));
}
이렇게하면 일부 제스처를 감지 할 수 있습니다. onDown(), onSingleTap() 및 onScroll() 잘 처리됩니다. 그러나 작동하지 않는 것은 onFling()입니다. 그러나 onFling()은 나를 위해 가장 중요한 입니다.
내 의심스런는 (모든 MotionEvent 역사 매개 변수 역사적 크기가 안드로이드/input.h 참조) MotionEvent에 저장 될 수있는 역사적 가치 에 의존 할 수 있기 때문에 onFling()가 작동하지 않는다는 것입니다. 그러나 MotionEvent 클래스의 obtain() 생성자는 을 사용하여 내역 값이있는 MotionEvent 객체를 구성 할 수 없습니다.
그래서 C면에서 얻은 실제 MotionEvent를 의 Java 측 onTouchEvent()에 공급할 수있는 방법이 있습니까? 나는, 자바 측에서 기록 정보 :-(
어떤 아이디어? 내가 하지 시험이 한
답장을 보내 주셔서 감사합니다.나는 이미 NativeActivity의 onTouchEvent()를 재정의하려고 시도했음을 언급 했어야합니다. Android 설명서에 NativeActivity가 Activity 클래스의 onTouchEvent() 메서드를 상속한다고 명시되어 있지만 결코 호출되지 않습니다. 불행히도, 이것은 갈 길이 없습니다 :/ – Andreas
죄송합니다. 나는 또한 당신의 질문에 대해 논평했을뿐입니다. 그러나 나의 평판은 이것을 아직 허용하지 않습니다. 불행히도 나는 C/C++에 익숙하지 않지만 [onInputQueueCreated] (http://developer.android.com/reference/android/app/NativeActivity.html#onInputQueueCreated (android.view.InputQueue)))? – Griddo
흠, onInputQueueCreated()가 어떻게 도움이 될 수 있다고 생각하십니까? 어떻게 든 모든 터치 이벤트를 가로 채서 GestureDetector로 전달할 수있는 방법을 찾아야합니다. 어떻게 onInputQueueCreated()가 여기에 도움이 될지 모르겠다. ... – Andreas