मैं एंड्रॉइड के लिए नया हूँ। मैं अपने आवेदन में एक स्थान से दूसरे स्थान पर एक रेखा खींचना चाहता हूं। मैं एंड्रॉइड में दो बिंदुओं के बीच एक रेखा कैसे खींच सकता हूं? क्रिप्या मेरि सहायता करे।

1
Manisha Patel 23 जून 2011, 17:54

2 जवाब

सबसे बढ़िया उत्तर

आपको मानचित्र में एक Overlay जोड़ना चाहिए और उसकी onDraw() विधि को ओवरराइड करना चाहिए। इस तरह आप मानचित्र पर जो चाहें खींच सकते हैं।

1
CaseyB 23 जून 2011, 18:08

इसका उपयोग करें यह मेरे लिए ठीक काम करता है

mapView.setBuiltInZoomControls(true);
            mapController = mapView.getController();
            ArrayList allGeoPoints = getDirections(8.487495, 76.948623,toLat 10.015861, 76.341867toLon);
            GeoPoint moveTo =  new GeoPoint(startLattitude, startLongigude);
            mapController.setCenter(moveTo);
            //mc.animateTo(moveTo);
            mapController.setZoom(12);
            mapView.getOverlays().add(new MyOverlay(allGeoPoints));


public static ArrayList getDirections(double lat1, double lon1, double lat2, double lon2) {
        String url = "http://maps.googleapis.com/maps/api/directions/xml?origin=" +lat1 + "," + lon1  + "&destination=" + lat2 + "," + lon2 + "&sensor=false&units=metric";
        String tag[] = { "lat", "lng" };
        ArrayList listOfGeopoints = new ArrayList();
        HttpResponse response = null;
        try {
            HttpClient httpClient = new DefaultHttpClient();
            HttpContext localContext = new BasicHttpContext();
            HttpPost httpPost = new HttpPost(url);
            response = httpClient.execute(httpPost, localContext);
            InputStream in = response.getEntity().getContent();
            DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
            Document doc = builder.parse(in);
            Log.e("**********************   ",new JsonOperations().convertStreamToString(in).toString());
            if (doc != null) {
                NodeList nl1, nl2;
                nl1 = doc.getElementsByTagName(tag[0]);
                nl2 = doc.getElementsByTagName(tag[1]);
                if (nl1.getLength() > 0) {
                    listOfGeopoints = new ArrayList();
                    for (int i = 0; i < nl1.getLength(); i++) {
                        Node node1 = nl1.item(i);
                        Node node2 = nl2.item(i);
                        double lat = Double.parseDouble(node1.getTextContent());
                        double lng = Double.parseDouble(node2.getTextContent());
                        listOfGeopoints.add(new GeoPoint((int) (lat * 1E6), (int) (lng * 1E6)));
                    }
                } else {
                    // No points found
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return listOfGeopoints;
    }

और मायोओवरले क्लास

public class MyOverlay extends Overlay {

    private ArrayList allGeoPoints;

    public MyOverlay(ArrayList allGeoPoints) {
        super();
        this.allGeoPoints = allGeoPoints;
    }

    @Override
    public boolean draw(Canvas canvas, MapView mv, boolean shadow, long when) {
        super.draw(canvas, mv, shadow);
        drawPath(mv, canvas);
        return true;
    }

    public void drawPath(MapView mv, Canvas canvas) {
        int xPrev = -1, yPrev = -1, xNow = -1, yNow = -1;
        Paint paint = new Paint();
        paint.setColor(Color.BLUE);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(4);
        //paint.setAlpha(100);
        if (allGeoPoints != null)
            for (int i = 0; i < allGeoPoints.size() - 4; i++) {
                GeoPoint gp = (GeoPoint) allGeoPoints.get(i);
                Point point = new Point();
                mv.getProjection().toPixels(gp, point);
                xNow = point.x;
                yNow = point.y;
                if (xPrev != -1) {
                    canvas.drawLine(xPrev, yPrev, xNow, yNow, paint);
                }
                xPrev = xNow;
                yPrev = yNow;
            }
    }
}
0
pranavjayadev 17 अगस्त 2012, 10:06