라이브 배경 화면을 코딩 할 필요가 없으며 현재 눌려진 점 목록이 필요합니다. SpareArray (기본적으로 HashMap과 동일하지만 더 빠름)에 점을 저장합니다.손가락을 뺄 때 Android 멀티 터치 충돌이 발생합니다.
이제 두 손가락 (1과 2)으로 화면을 터치하고 손가락 (첫 손가락 2, 1)을 들어 올리면 작동합니다. 하지만 손가락 1을 먼저 들어 올리면 앱이 다운됩니다. 역순으로 손가락을 들어야 만합니다.
@Override
public void onTouchEvent(MotionEvent event) {
for (int i = 0; i < event.getPointerCount(); i++) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_POINTER_DOWN:
case MotionEvent.ACTION_MOVE:
int pID = event.getPointerId(i);
Points.put(pID, new Point((int)event.getX(pID), (int)event.getY(pID))); //CRASH HERE
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
Points.remove(event.getPointerId(i));
break;
}
}
super.onTouchEvent(event);
handler.post(drawRunnable);
}
나는 항상 "java.lang.IllegalArgumentException가를 : pointerIndex 범위를 벗어"얻을 예외
감사합니다, 도미니크을
편집: 스택 추적
07-16 19:55:58.354: E/AndroidRuntime(4986): FATAL EXCEPTION: main
07-16 19:55:58.354: E/AndroidRuntime(4986): java.lang.IllegalArgumentException: pointerIndex out of range
07-16 19:55:58.354: E/AndroidRuntime(4986): at android.view.MotionEvent.nativeGetAxisValue(Native Method)
07-16 19:55:58.354: E/AndroidRuntime(4986): at android.view.MotionEvent.getX(MotionEvent.java:1974)
07-16 19:55:58.354: E/AndroidRuntime(4986): at net.ta.livewp.LiveWallpaper$xEngine.onTouchEvent(LiveWallpaper.java:103)
07-16 19:55:58.354: E/AndroidRuntime(4986): at android.service.wallpaper.WallpaperService$IWallpaperEngineWrapper.executeMessage(WallpaperService.java:1047)
07-16 19:55:58.354: E/AndroidRuntime(4986): at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:61)
07-16 19:55:58.354: E/AndroidRuntime(4986): at android.os.Handler.dispatchMessage(Handler.java:99)
07-16 19:55:58.354: E/AndroidRuntime(4986): at android.os.Looper.loop(Looper.java:137)
07-16 19:55:58.354: E/AndroidRuntime(4986): at android.app.ActivityThread.main(ActivityThread.java:4575)
07-16 19:55:58.354: E/AndroidRuntime(4986): at java.lang.reflect.Method.invokeNative(Native Method)
07-16 19:55:58.354: E/AndroidRuntime(4986): at java.lang.reflect.Method.invoke(Method.java:511)
07-16 19:55:58.354: E/AndroidRuntime(4986): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
07-16 19:55:58.354: E/AndroidRuntime(4986): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
07-16 19:55:58.354: E/AndroidRuntime(4986): at dalvik.system.NativeStart.main(Native Method)
에서 찾을 수 있습니다, 당신은'Exception'의 이름 만이 아니라 로그를 게시해야한다. 로그는 그것이 던져지고있는 코드의 특정 라인을 가리키며, 이는 당신과 당신을 도우려는 사람들에게 유용합니다. – adneal
미안하지만, 내 게시물을 편집했지만 줄을 표시 (오른쪽으로 스크롤) – teamalpha5441