
我一直在尝试实现OntouchEvent,以便当用户移动(拖放)overlayitem时可以做出反应.
我在OsmdroID站点上找到了类似的内容:http://code.google.com/p/osmdroid/issues/detail?id=225.我在这里使用代码作为参考,但仍然无法为我工作,然后我的应用程序在到达hitTest时崩溃.
有什么建议吗?谢谢.
public boolean ontouchEvent(MotionEvent event, MapVIEw mapVIEw) { final int action = event.getAction(); final int x = (int) event.getX(); final int y = (int) event.getY(); final Projection pj = mapVIEw.getProjection(); boolean result = false; //Object TAG; //Log.d(TAG, "ontouchEvent entered"); System.out.println("ontouchEvent!"); Point p = new Point(0,0); Point t = new Point(0,0); //System.out.print(MotionEvent.ACTION_DOWN); //System.out.print(action); if (action == MotionEvent.ACTION_DOWN) { System.out.println("Action Down!"); for (OverlayItem item : mOverlays) { // Create a new GeoPoint from pixel coordinates (x, y, pointReuse): //pj.fromMapPixels(x, y, t); // Convert the given GeoPoint to onscreen pixel coordinates (GeoPoint, pointOut): pj.topixels(item.getPoint(), p); //System.out.println(t.x); //System.out.println(p.x); //System.out.println(t.y); //System.out.println(p.y); defaultMarker = item.getDrawable(); if (hitTest(item, defaultMarker, x - p.x, y - p.y)) { System.out.println("Action Down -> IF!"); result = true; inDrag = item; mOverlays.remove(inDrag); populate(); xDragtouchOffset = 0; yDragtouchOffset = 0; setDragImageposition(x, y); dragImage.setVisibility(VIEw.VISIBLE); xDragtouchOffset = t.x - p.x; yDragtouchOffset = t.y - p.y; break; } } } else if (action == MotionEvent.ACTION_MOVE && inDrag != null) { //dragImage.setVisibility(VIEw.VISIBLE); setDragImageposition(x, y); System.out.println("Action Move!"); result = true; } else if (action == MotionEvent.ACTION_UP && inDrag != null) { dragImage.setVisibility(VIEw.GONE); GeoPoint pt = (GeoPoint) pj.fromPixels(x - xDragtouchOffset, y - yDragtouchOffset); OverlayItem toDrop = new OverlayItem(inDrag.getTitle(), inDrag.getSnippet(), pt); mOverlays.add(toDrop); populate(); inDrag = null; result = true; pj.fromMapPixels(x, y, t); if((t.x - p.x) == xDragtouchOffset && (t.y - p.y) == yDragtouchOffset) { System.out.println ("Do something here if desired because we dIDn't move item " + toDrop.getTitle() ); } System.out.println("Action Up!"); } System.out.print(inDrag); return (result || super.ontouchEvent(event, mapVIEw));}private voID setDragImageposition(int x, int y) { relativeLayout.LayoutParams lp= (relativeLayout.LayoutParams)dragImage.getLayoutParams(); lp.setmargins(x-xDragImageOffset-xDragtouchOffset, y-yDragImageOffset-yDragtouchOffset, 0, 0); dragImage.setLayoutParams(lp); }解决方法:
我上面的代码工作.我只注意到工作代码和您的工作代码之间有两点不同.一种是您要发送的hitTest参数,请尝试更改
如果(hitTest(item,defaultMarker,x-p.x,y-p.y)){
至
如果(hitTest(item,defaultMarker,t.x-p.x,t.y-p.y)){
第二个是您应该取消注释pj.fromMapPixels(x,y,t);
你也应该取消注释dragImage.setVisibility(VIEw.VISIBLE);如果要在拖动时查看图像
总结以上是内存溢出为你收集整理的android-无法使用Osmdroid实现onTouchEvent(拖放)全部内容,希望文章能够帮你解决android-无法使用Osmdroid实现onTouchEvent(拖放)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)