Android 自定义 MapView

发布于 2024-10-11 11:11:44 字数 1164 浏览 8 评论 0原文

我正在尝试创建 MapView 的扩展版本。

问题是当定义扩展版本的 MapView 时,mapview 不会平移。

我正在我的自定义地图视图中实现一个 onTouchListener

我还想知道是否有任何方法可以平移地图视图。

当 MapView 的库存版本与相同的源代码一起使用时,问题不会持续存在。

编辑

MyMapView来源:

public class MyMapView extends MapView{

    public MyMapView(Context context, String apiKey) {
        super(context, apiKey);

    }
    public MyMapView(Context context, AttributeSet attrs) {
        super(context, attrs);

    }
    public MyMapView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if(event.getAction()==MotionEvent.ACTION_DOWN){
            Log.v("MyMapView","Touched");
        }

        return false ;
    }



}

来自MapActivity的我的onCreate()

protected void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.mapper);
    mMapView=(MyMapView) findViewById(R.id.mapper_map);
    mMapView.setSatellite(false);       

}

I am trying to create an extended version of MapView.

The problem is when extended version of MapView is defined, mapview does not pan.

I am implementing an onTouchListener Inside my custom map view.

I also want to know is there any methods from where I can pan the mapview.

The problem does not persist when stock version of MapView is used with same source code.

EDIT

MyMapView source:

public class MyMapView extends MapView{

    public MyMapView(Context context, String apiKey) {
        super(context, apiKey);

    }
    public MyMapView(Context context, AttributeSet attrs) {
        super(context, attrs);

    }
    public MyMapView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if(event.getAction()==MotionEvent.ACTION_DOWN){
            Log.v("MyMapView","Touched");
        }

        return false ;
    }



}

my onCreate() from MapActivity

protected void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.mapper);
    mMapView=(MyMapView) findViewById(R.id.mapper_map);
    mMapView.setSatellite(false);       

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

小猫一只 2024-10-18 11:11:44

你的 onTouchEvent() 应该返回 false,否则它将消耗该事件。

您还可以实例化 MapController 并使用它来更改视图。这是我正在开发的应用程序的代码片段:

    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mapview);

    myMapView = (MapView) findViewById( R.id.myMapView );
    myMapView.setBuiltInZoomControls( true );
    myMapController = myMapView.getController();

    myPoint = new GeoPoint(0, 0);
    myMapController.setCenter( myPoint );
    myMapController.zoomToSpan( 360 * MILLION, 360 * MILLION );
}

Your onTouchEvent() should return false, otherwise it will consume the event.

You can also instantiate a MapController and use it to change the view. Here's a code snippet from an app I'm working on:

    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mapview);

    myMapView = (MapView) findViewById( R.id.myMapView );
    myMapView.setBuiltInZoomControls( true );
    myMapController = myMapView.getController();

    myPoint = new GeoPoint(0, 0);
    myMapController.setCenter( myPoint );
    myMapController.zoomToSpan( 360 * MILLION, 360 * MILLION );
}
笑红尘 2024-10-18 11:11:44

我投错了。

mMapView=(MyMapView) findViewById(R.id.mapper_map); 

应该可以

mMapView=(MapView) findViewById(R.id.mapper_map); 

解决这个问题。

不管怎样,谢谢。

I was casting it wrong.

mMapView=(MyMapView) findViewById(R.id.mapper_map); 

should be

mMapView=(MapView) findViewById(R.id.mapper_map); 

This solves the issue.

Thankx anyways.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文