android-无法使用Osmdroid实现onTouchEvent(拖放)

android-无法使用Osmdroid实现onTouchEvent(拖放),第1张

概述我一直在尝试实现OnTouchEvent,以便当用户移动(拖放)overlayitem时可以做出反应.我在Osmdroid站点上找到了类似的内容:http://code.google.com/p/osmdroid/issues/detail?id=225.我在这里使用代码作为参考,但仍然无法为我工作,然后我的应用程序在到达hitTest时崩溃.有什么建议吗?谢

我一直在尝试实现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(拖放)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1094443.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存