1

私はアンドロイドに慣れていません...私は2日間、arcGISマップに複数のピンを表示するためにarcGISマップに取り組んできました..実行中ではなくデバッグ中にのみ出力を取得しています..ポップアップを表示する必要がありますピンをテーピングするときのウィンドウ(コールアウト).誰か助けてください..よろしくお願いします..

これが私のコードです

if (MyXMLHandler.getResponse().getLatitude().size() > 0) {

                for (int i = 0; i < MyXMLHandler.getResponse().getLatitude()
                        .size(); i++) {
                    Log.v("TEST", "size=="
                            + MyXMLHandler.getResponse().getLatitude().size());

                    double latitude = Double.parseDouble(MyXMLHandler
                            .getResponse().getLatitude().get(i).toString());
                    double langtude = Double.parseDouble(MyXMLHandler
                            .getResponse().getLongtude().get(i).toString());

                    Log.v("TEST", "lan........" + latitude + "....lng......"
                            + langtude);

                    latlong = new Point(langtude, latitude);
                    point = (Point) GeometryEngine.project(latlong,
                            SpatialReference.create(4326),
                            mMapView.getSpatialReference());

                    gLayer = new GraphicsLayer();

                    PictureMarkerSymbol pictureMarkerSymbol = new PictureMarkerSymbol(
                            getResources().getDrawable(R.drawable.s));
                    graphic = new Graphic(point, pictureMarkerSymbol);

                    gLayer.addGraphic(graphic);

                    mMapView.addLayer(gLayer);
                    mMapView.setOnSingleTapListener(Arcgis_routeActivity.this);



                }

@Override
    public void onSingleTap(final float x, final float y) {
        // TODO Auto-generated method stub

        LayoutInflater inflator = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
        View v = inflator.inflate(R.layout.callout_xml, null);
        TextView textView1 = (TextView) v.findViewById(R.id.textView1);
        textView1.setText(MyXMLHandler.getResponse().getName().get(0)
                .toString());

        location = new Point(x, y);
        if (callout != null) {
            callout.hide();
        } else {
            callout = mMapView.getCallout();
            callout.setStyle(R.xml.calloutstyle);

        }

        callout.setOffset(0, -15);
        callout.show(location, v);
    }``
4

2 に答える 2

0
Iam displaying multiple pins in asynctask from the raw folder..on single tap listener comparig the tapped listener lat long values with the dropped pin lat longs..



  private class LocationsDisplaying extends AsyncTask<Void, Void, Void> {

            @Override
            protected void onPreExecute() {
                // TODO Auto-generated method stub
                super.onPreExecute();

            }

            @Override
            protected Void doInBackground(Void... params) {
                // TODO Auto-generated method stub

                try {

                    /** Handling XML */
                    SAXParserFactory spf = SAXParserFactory.newInstance();
                    SAXParser sp = spf.newSAXParser();
                    XMLReader xr = sp.getXMLReader();

                    /** Create handler to handle XML Tags ( extends DefaultHandler ) */
                    MyXMLHandler myXMLHandler = new MyXMLHandler();
                    xr.setContentHandler(myXMLHandler);
                    InputStream is = MainActivity.this.getResources()
                            .openRawResource(R.raw.service);
                    xr.parse(new InputSource(is));

                } catch (Exception e) {
                    System.out.println("XML Pasing Excpetion = " + e);
                }

                return null;
            }

            @Override
            protected void onPostExecute(Void result) {
                // TODO Auto-generated method stub
                super.onPostExecute(result);
                dialog.dismiss();
                new PinDisplay().execute();

            }
        }

クラス PinDisplay extends AsyncTask { ProgressDialog ダイアログ;

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();
        dialog = new ProgressDialog(MainActivity.this);
        dialog.setTitle("Please wait...");
        dialog.setCanceledOnTouchOutside(false);
        dialog.setMessage("Loading......");
        dialog.show();

    }

@Override
protected Void doInBackground(Void... params) {

    displaying_mapUI();

    return null;
}

@Override
protected void onPostExecute(Void result) {
    // TODO Auto-generated method stub
    super.onPostExecute(result);

    dialog.dismiss();

}

}

 private void displaying_mapUI() {
        // TODO Auto-generated method stub
        Point latlong = null;
        Point point;
        Graphic graphic;
        GraphicsLayer gLayer;

        if (MyXMLHandler.getResponse().getLatitude().size() > 0) {

            for (int i = 0; i < MyXMLHandler.getResponse().getLatitude().size(); i++) {
                Log.v("TEST", "size=="
                        + MyXMLHandler.getResponse().getLatitude().size());

                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                double latitude = Double.parseDouble(MyXMLHandler.getResponse()
                        .getLatitude().get(i).toString());
                double langtude = Double.parseDouble(MyXMLHandler.getResponse()
                        .getLongtude().get(i).toString());

                Log.v("TEST", "lan........" + latitude + "....lng......"
                        + langtude);

                latlong = new Point(langtude, latitude);

                point = (Point) GeometryEngine.project(latlong,
                        SpatialReference.create(4326),
                        mMapView.getSpatialReference());

                gLayer = new GraphicsLayer();

                PictureMarkerSymbol pictureMarkerSymbol = new PictureMarkerSymbol(
                        getResources().getDrawable(R.drawable.pushpin2));

                graphic = new Graphic(point, pictureMarkerSymbol);

                gLayer.addGraphic(graphic);

                mMapView.addLayer(gLayer);

            }

        }

    }

    @Override
    public void onSingleTap(final float x, final float y) {
        // TODO Auto-generated method stub

        mMapView.setRotationAngle(0);
        compass.setRotationAngle(mMapView.getRotationAngle());
        compass.postInvalidate();

        LayoutInflater inflator = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
        View view = inflator.inflate(R.layout.callout_xml, null);
        TextView text = (TextView) view.findViewById(R.id.textView1);

        // View view = createView();
        Point p = mMapView.toMapPoint(x, y);

        // Log.v("TEST", "X=" + p.getX());
        // Log.v("TEST", "Y=" + p.getY());

        SpatialReference sp = SpatialReference.create(4326);
        Point aux = (Point) GeometryEngine.project(p,
                mMapView.getSpatialReference(), sp);

        location = new Point(aux.getX(), aux.getY());

        StringTokenizer tokenst1 = new StringTokenizer(String.valueOf(aux
                .getY()), ".");
        String firstt1 = tokenst1.nextToken();

        float tapLat = Float.parseFloat(firstt1);

        StringTokenizer tokenst2 = new StringTokenizer(String.valueOf(aux
                .getX()), ".");
        String firstt2 = tokenst2.nextToken();

        float tapLng = Float.parseFloat(firstt2);

        StringTokenizer tokensl1 = new StringTokenizer(String.valueOf(latlong
                .getY()), ".");
        String firstl1 = tokensl1.nextToken();

        float staticLat = Float.parseFloat(firstl1);

        StringTokenizer tokensl2 = new StringTokenizer(String.valueOf(latlong
                .getX()), ".");
        String firstl2 = tokensl2.nextToken();

        float staticLng = Float.parseFloat(firstl2);

        Log.v("TEST", "tapLat" + tapLat);
        Log.v("TEST", "tapLng" + tapLng);

        Log.v("TEST", "staticLat" + staticLat);
        Log.v("TEST", "staticLng" + staticLng);

        if (tapLat == staticLat && tapLng == staticLng) {

            locationName = "Alberta";

        } else {

            for (int j = 0; j < MyXMLHandler.getResponse().getLatitude().size(); j++) {

                double double_lat = MyXMLHandler.getResponse().getLatitude().get(j);

                double double_long = MyXMLHandler.getResponse().getLongtude().get(j);

                StringTokenizer tokens = new StringTokenizer(String.valueOf(double_lat),
                        ".");
                String first = tokens.nextToken();

                Log.v("TEST", "first......" + first);

                StringTokenizer tokens1 = new StringTokenizer(
                        String.valueOf(double_long), ".");
                String first1 = tokens1.nextToken();

                Log.v("TEST", "first1111111......" + first1);

                float service_location_lat = Float.parseFloat(first);

                float service_location_lng = Float.parseFloat(first1);

                if (tapLat == service_location_lat
                        && tapLng == service_location_lng) {

                    Log.v("TEST", "if service_location_lng....."
                            + service_location_lng);
                    Log.v("TEST", "if service_location_lat........"
                            + service_location_lat);

                    locationName = MyXMLHandler.getResponse().getName().get(j)
                            .toString().trim();

                    Log.v("TESt", "locationName....." + locationName);

                    j = MyXMLHandler.getResponse().getLatitude().size();

                } else {

                    locationName = "No Results Found";
                }
            }
        }

        text.setText(locationName);

        callout.show(p, view);

        view.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                if (locationName.equalsIgnoreCase("No Results Found")
                        || locationName.equalsIgnoreCase("Alberta")) {

                    Toast.makeText(getApplicationContext(),
                            "Please select Location", Toast.LENGTH_SHORT)
                            .show();

                } else {
                    Intent intent = new Intent(MainActivity.this,
                            RouteDisplying.class);
                    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    startActivity(intent);
                }
            }
        });

    }
于 2013-06-25T05:33:07.837 に答える
0

これは、calloutPopupWindowに役立つ可能性があることがわかったものです。悲しいことに、私はそれを使用していませんが、API では、複数のコールアウトを持つことができるという追加の利点を備えたコールアウトに似ていると述べています。お役に立てれば!

于 2014-03-04T18:35:13.407 に答える