Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 确认对话框后如何将数据从类传递到活动?(在mapview上绘制)_Android_Google Maps_Android Mapview - Fatal编程技术网

Android 确认对话框后如何将数据从类传递到活动?(在mapview上绘制)

Android 确认对话框后如何将数据从类传递到活动?(在mapview上绘制),android,google-maps,android-mapview,Android,Google Maps,Android Mapview,我有一个扩展的覆盖类: 短代码: public class MapOverlay extends Overlay { private Context context; private ProgressDialog dDialog; Drawable drawable; GeoPoint MainPoint; MapView mapView; public MapOverlay(Context context, MapView mapView) { this.context = c

我有一个扩展的覆盖类:

短代码:

public class MapOverlay extends Overlay {

private Context context;
private ProgressDialog dDialog;  
Drawable drawable;
GeoPoint MainPoint;
MapView mapView;

public MapOverlay(Context context, MapView mapView)
{
    this.context = context;
    this.mapView = mapView;
}

@Override
public boolean onTap(GeoPoint p, MapView mapView) 
{   
      this.MainPoint = p;
      AlertDialog.Builder dialog = new AlertDialog.Builder(context);
      dialog.setMessage("Do you want to set point here?")
             .setCancelable(false)
   .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
       public void onClick(DialogInterface dialog, int id) {
         setPoint();

       }
   })
   .setNegativeButton("No", new DialogInterface.OnClickListener() {
       public void onClick(DialogInterface dialog, int id) {
            dialog.cancel();
       }
   });

      dialog.show();

    return true;
}    

public void setPoint()
{

       OverlayItem overlayitem = new OverlayItem(MainPoint, "Hi!", "You touched this location!");


}
我想在我的mapview上绘制接触点,这是在本活动中:

public class MyMapLocationActivity extends MapActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    setContentView(R.layout.main); 


    mapView = (MapView) findViewById(R.id.mapview);
    mapView.setBuiltInZoomControls(true);

    drawable = this.getResources().getDrawable(R.drawable.androidmarker);           
            MapOverlay myOverlay = new MapOverlay(this, mapView);

    mapView.getOverlays().add(myOverlay);
    mapView.postInvalidate();

}

在确认MapOverlay类中的对话框后,我想标记接触点。我想我错过了传递一些东西-我还应该做什么呢?

您需要一个扩展ItemizeOverlay的类,它反过来可以保存覆盖项,该覆盖项在其构造函数中接受一个地质点。差不多

public class MapDemo extends MapActivity implements OnTouchListener {

    private Drawable mDrawable;
    private ItemizedMapOverlay mItemizedOverlay;
    private OverlayItem mOverlayitem;
    private GeoPoint mClickedPoint = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        GeoPoint mapCentrePoint = new GeoPoint(51500000, 0);
        MapView mapView = (MapView) findViewById(R.id.mapview);
        mapView.setOnTouchListener(this);
        MapController mapCtrlr = mapView.getController();
        mapView.setBuiltInZoomControls(true);
        mapCtrlr.setZoom(8);
        mapCtrlr.setCenter(mapCentrePoint);
        List<Overlay> mapOverlays = mapView.getOverlays();
        mDrawable = this.getResources().getDrawable(R.drawable.icon);
        mItemizedOverlay = new ItemizedMapOverlay(mDrawable, this);
        mapOverlays.add(mItemizedOverlay);
    }

    @Override
    protected boolean isRouteDisplayed() {return false;}

    @Override
    public boolean onTouch(View v, MotionEvent e) {

        if (e.getAction() == MotionEvent.ACTION_DOWN) {
            final View fv = v;
            AlertDialog.Builder dialog = new AlertDialog.Builder(v
                    .getRootView().getContext());
            dialog.setMessage("Do you want to set point here?")
                    .setCancelable(false)
                    .setPositiveButton("Yes",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int id) {
                                    setPoint(fv);
                                }
                            })
                    .setNegativeButton("No",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int id) {
                                    dialog.cancel();
                                }
                            });

            dialog.show();
            // Can't show point till +ve button selected, so store it
            mClickedPoint = ((MapView) v).getProjection()
                            .fromPixels((int)e.getX(), (int)e.getY());
        }
        return true;
    }

    void setPoint(View v) {
        if (mClickedPoint != null) {
            mOverlayitem = new OverlayItem(mClickedPoint, "test", "test2");
            mOverlayitem.setMarker(mDrawable);
            mItemizedOverlay.clear(); // clear last marker
            mItemizedOverlay.addOverlay(mOverlayitem);
            v.postInvalidate();
        }
    }

}
公共类MapDemo扩展了MapActivity实现OnTouchListener{
私人可提取;
私有项目化覆盖层斜接覆盖层;
专用OverlayItem mOverlayitem;
专用地质点mClickedPoint=null;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
地质点地图中心点=新的地质点(51500000,0);
MapView MapView=(MapView)findViewById(R.id.MapView);
setOnTouchListener(这个);
MapController mapCtrlr=mapView.getController();
mapView.SetBuilTinZoomControl(真);
mapCtrlr.setZoom(8);
mapCtrlr.setCenter(mapCentrePoint);
List mapOverlays=mapView.getOverlays();
mDrawable=this.getResources().getDrawable(R.drawable.icon);
mItemizedOverlay=新的ItemizedMapOverlay(mDrawable,this);
地图覆盖。添加(斜接覆盖);
}
@凌驾
受保护的布尔值isRouteDisplayed(){return false;}
@凌驾
公共布尔onTouch(视图v,运动事件e){
如果(e.getAction()==MotionEvent.ACTION\u DOWN){
最终视图fv=v;
AlertDialog.Builder dialog=新建AlertDialog.Builder(v
.getRootView().getContext());
setMessage(“是否要在此处设置点?”)
.setCancelable(错误)
.setPositiveButton(“是”,
新建DialogInterface.OnClickListener(){
公共void onClick(对话框接口对话框,
int id){
设定值(fv);
}
})
.setNegativeButton(“否”,
新建DialogInterface.OnClickListener(){
公共void onClick(对话框接口对话框,
int id){
dialog.cancel();
}
});
dialog.show();
//在选择+ve按钮之前无法显示点,因此请将其存储
mClickedPoint=((MapView)v).getProjection()
.fromPixels((int)e.getX(),(int)e.getY());
}
返回true;
}
无效设定点(视图v){
如果(mClickedPoint!=null){
mOverlayitem=新的覆盖项(mClickedPoint,“测试”,“测试2”);
mOverlayitem.setMarker(可绘制);
MitemizeOverlay.clear();//清除最后一个标记
斜接覆盖。添加覆盖(mOverlayitem);
v、 后验证();
}
}
}

public类itemizedmaoverlay扩展了ItemizedOverlay{
private ArrayList mOverlays=new ArrayList();
public ItemizedMapOverlay(可绘制默认标记){
super(boundCenterBottom(defaultMarker));
}
public ItemizedMapOverlay(可绘制的默认标记,上下文){
super(boundCenterBottom(defaultMarker));
}
@凌驾
受保护的OverlayItem createItem(inti){return mOverlays.get(i);}
@凌驾
public void draw(android.graphics.Canvas画布、MapView MapView、,
布尔阴影){
super.draw(画布、地图视图、阴影);
}
@凌驾
public int size(){return mOverlays.size();}
公共void addOverlay(OverlayItem overlay){
添加(覆盖);
填充();
}
公共空间清除(){
mOverlays.clear();
}
}

应该足够近,以便您进行调整。

您需要有一个扩展ItemizeOverlay的类,该类反过来可以保存覆盖项,该覆盖项在其构造函数中采用一个地质点。差不多

public class MapDemo extends MapActivity implements OnTouchListener {

    private Drawable mDrawable;
    private ItemizedMapOverlay mItemizedOverlay;
    private OverlayItem mOverlayitem;
    private GeoPoint mClickedPoint = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        GeoPoint mapCentrePoint = new GeoPoint(51500000, 0);
        MapView mapView = (MapView) findViewById(R.id.mapview);
        mapView.setOnTouchListener(this);
        MapController mapCtrlr = mapView.getController();
        mapView.setBuiltInZoomControls(true);
        mapCtrlr.setZoom(8);
        mapCtrlr.setCenter(mapCentrePoint);
        List<Overlay> mapOverlays = mapView.getOverlays();
        mDrawable = this.getResources().getDrawable(R.drawable.icon);
        mItemizedOverlay = new ItemizedMapOverlay(mDrawable, this);
        mapOverlays.add(mItemizedOverlay);
    }

    @Override
    protected boolean isRouteDisplayed() {return false;}

    @Override
    public boolean onTouch(View v, MotionEvent e) {

        if (e.getAction() == MotionEvent.ACTION_DOWN) {
            final View fv = v;
            AlertDialog.Builder dialog = new AlertDialog.Builder(v
                    .getRootView().getContext());
            dialog.setMessage("Do you want to set point here?")
                    .setCancelable(false)
                    .setPositiveButton("Yes",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int id) {
                                    setPoint(fv);
                                }
                            })
                    .setNegativeButton("No",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,
                                        int id) {
                                    dialog.cancel();
                                }
                            });

            dialog.show();
            // Can't show point till +ve button selected, so store it
            mClickedPoint = ((MapView) v).getProjection()
                            .fromPixels((int)e.getX(), (int)e.getY());
        }
        return true;
    }

    void setPoint(View v) {
        if (mClickedPoint != null) {
            mOverlayitem = new OverlayItem(mClickedPoint, "test", "test2");
            mOverlayitem.setMarker(mDrawable);
            mItemizedOverlay.clear(); // clear last marker
            mItemizedOverlay.addOverlay(mOverlayitem);
            v.postInvalidate();
        }
    }

}
公共类MapDemo扩展了MapActivity实现OnTouchListener{
私人可提取;
私有项目化覆盖层斜接覆盖层;
专用OverlayItem mOverlayitem;
专用地质点mClickedPoint=null;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
地质点地图中心点=新的地质点(51500000,0);
MapView MapView=(MapView)findViewById(R.id.MapView);
setOnTouchListener(这个);
MapController mapCtrlr=mapView.getController();
mapView.SetBuilTinZoomControl(真);
mapCtrlr.setZoom(8);
mapCtrlr.setCenter(mapCentrePoint);
List mapOverlays=mapView.getOverlays();
mDrawable=this.getResources().getDrawable(R.drawable.icon);
mItemizedOverlay=新的ItemizedMapOverlay(mDrawable,this);
地图覆盖。添加(斜接覆盖);
}
@凌驾
受保护的布尔值isRouteDisplayed(){return false;}
@凌驾
公共布尔onTouch(视图v,运动事件e){
如果(e.getAction()==MotionEvent.ACTION\u DOWN){
最终视图fv=v;
AlertDialog.Builder dialog=新建AlertDialog.Builder(v
.getRootView().getContext());
setMessage(“是否要在此处设置点?”)
.setCancelable(错误)
.setPositiveButton(“是”,
新建DialogInterface.OnClickListener(){
公共void onClick(对话框接口对话框,