我工作的一個谷歌地圖應用程序,其中用戶可觸摸地圖和標記在地圖上起點和終點。然後連接兩個點的路徑在地圖上繪製。 爲了處理觸摸事件,我在MapOverlay類中實現了onTouchEvent方法。 我觀察到一些奇怪的行爲與地圖。當用戶獲得連接兩個點的路徑時,地圖凍結,即我無法平移或縮放地圖。 我發現,如果返回值是真的onTouchEvent這是MapOverlay方法內的內部在上述地圖凍結所述情節。如果我返回false,那麼地圖不會凍結。但是,如果我想再次在地圖上標記新的點,應用程序崩潰... onTouchEvent的返回值如何與此行爲相關?爲什麼onTouchEvent的返回值會使應用程序崩潰或凍結mapView?
0
A
回答
1
如果返回true,處理程序告訴系統,它處理的的onTouchEvent,系統不會調用另一個onTouchListener。如果你返回false,你告訴系統,你沒有處理觸摸事件,它會調用底層視圖的onTouchListener。你的地圖不會凍結,但它沒有得到任何觸摸事件,因爲你的處理器處理它們。
1
即使作品onTouchEvent()
的方式是如果你返回true,這意味着觸摸事件被處理,Android不會繼續沿視圖層次結構處理觸摸事件。如果你返回false,它將繼續。
在這種情況下,當你總是返回true,你總是說,觸摸事件已處理。因此,你做的任何手勢都不會被處理,因爲你說它已經被處理了。因此,它看起來像地圖凍結。相反,把這樣一個條件:
@Override
public boolean onTouchEvent(MotionEvent event){
boolean wasHandled = false;
if(/* condition where your touch event was handled */)
wasHandled = true;
else
wasHandled = super.onTouchEvent(event);
return wasHandled;
}
,當你返回false崩潰或者是在你的程序有問題,或者進入一個循環,因爲該事件的處理從來沒有的原因。
+0
我根據條件返回了true或false,而不是真正的返回,並且我的問題得到解決。謝謝。 –
相關問題
- 1. MapView應用程序崩潰
- 2. Genymotion應用程序崩潰/凍結
- 3. 爲什麼我的程序在返回後會凍結?
- 4. 爲什麼button.setOnClickListener會使我的應用程序崩潰?
- 5. 掛接java應用程序崩潰/凍結應用程序
- 6. iOS應用程序凍結,但不會崩潰?
- 7. 爲什麼應用程序崩潰?
- 8. Android應用程序崩潰,爲什麼?
- 9. WatiN爲什麼凍結應用程序
- 10. 爲什麼getPackageManager()。getInstalledPackages()會使應用程序崩潰
- 11. MapView:推出應用程序崩潰
- 12. 爲什麼隨機數會崩潰我的Android應用程序?
- 13. 爲什麼以下行會崩潰我的Android應用程序?
- 14. SenTestingKit爲什麼會導致我的應用程序崩潰?
- 15. 偶爾我的應用程序會崩潰,爲什麼?
- 16. 爲什麼Android會「復活」崩潰的應用程序?
- 17. 爲什麼NSMutableArray Count會崩潰我的應用程序?
- 18. cellForRowAtIndexPath:返回零/應用程序崩潰
- 19. 爲什麼程序崩潰?
- 20. 爲什麼程序崩潰?
- 21. 爲什麼我的程序在返回語句時崩潰?
- 22. 爲什麼這個返回「不幸的是你的應用程序崩潰了」?
- 23. NSInvocation返回值,但使應用程序崩潰與EXC_BAD_ACCESS
- 24. GDI +初始化會崩潰應用程序,爲什麼?
- 25. 爲什麼訪問文件會凍結整個應用程序?
- 26. 爲什麼2個Try/Catch塊會凍結應用程序?
- 27. 爲什麼我的程序在給定負值時會崩潰?
- 28. 爲什麼我的應用程序崩潰使用__autoreleasing + __strong?
- 29. dismissModalViewControllerAnimated:凍結的應用程序,而不是崩潰
- 30. 當我嘗試運行它時,爲什麼我的程序凍結/崩潰?
所以,現在我明白了地圖沒有註冊任何觸摸事件,因此沒有響應。我該如何解決這個問題?我希望地圖能夠在地圖上繪製路徑之後註冊觸摸事件。 –
爲什麼不在你的EventListener中返回false,並在返回之前執行你想要做的功能? –
我發現默認情況下我在onTouchEvent的最後返回true。所以處理程序假設事件正在處理,無論如何。問題現在已解決。謝謝。 –