2012-08-07 3 views
0

Salut, je suis débutant dans le développement android. Je développe une application similaire à la peinture. J'ai déjà dessiné quelques points sur la toile. Maintenant, je veux tracer une ligne entre ces points à travers fingure. Je ne sais pas comment je peux le faire. Je n'utilise pas Google Maps.Comment dessiner une ligne droite entre deux points sur toile avec fingure dans android

package com.example.point; 

import java.util.ArrayList; 
import java.util.List; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.Path; 
import android.graphics.PointF; 
import android.util.Log; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnTouchListener; 

public class DrawView extends View implements OnTouchListener { 
    private static final String TAG = "DrawView"; 

    List<Point> points = new ArrayList<Point>(); 
    List<Point> points1 = new ArrayList<Point>(); 
    List<Point> points2 = new ArrayList<Point>(); 
    Paint paint = new Paint(); 
PointF firstpoint=new PointF(100,100); 
PointF secondpoint=new PointF(200,200); 
Path path=new Path(); 
    public DrawView(Context context) { 
     super(context); 
     setFocusable(true); 
     setFocusableInTouchMode(true); 

     this.setOnTouchListener(this); 

     paint.setColor(Color.BLACK); 

     paint.setAntiAlias(true); 
    } 

    @Override 
    public void onDraw(Canvas canvas) { 


     paint.setStrokeWidth(3); 
     canvas.drawPoint(100, 100, paint); 
     canvas.drawPoint(200, 200, paint); 
     canvas.drawPoint(200, 400, paint); 
     Point p=new Point(); 
     Point p1=new Point(); 
     //p1=points.get(1); 
     for(int i=points.size()-2;i<points.size();i++) 
     { 

      p=points.get(i); 
      //if(p1.x==100 && p1.y==100) 
     //canvas.drawLine(100, 100, p.x, p.y, paint); 
    // path.moveTo(100, 100); 
     //path.lineTo(200, 200); 
     //canvas.drawPath(path, paint); 
     } 




    } 

    public boolean onTouch(View view, MotionEvent event) { 

     /*if(event.getAction()==MotionEvent.ACTION_MOVE) 
     { 
     Point point1 = new Point();   
      point1.x = event.getX(); 
      point1.y = event.getY(); 
      points.add(point1); 
      invalidate(); 
      Log.d(TAG, "point: " + point1); 


     }*/ 
     //if(event.getX()==100 && event.getY()==100) 
     //{ 
      if(event.getAction()==MotionEvent.ACTION_MOVE) 
      { 
      Point point1 = new Point();   
      point1.x = event.getX(); 
      point1.y = event.getY(); 
      points.add(point1); 

      invalidate(); 
      Log.d(TAG, "point: " + point1); 
      //} 

     } 
     //return false; 
     return true; 



     /*switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      Point point = new Point();   
      point.x = event.getX(); 
      point.y = event.getY(); 
      points.add(point); 
      invalidate(); 
      Log.d(TAG, "point: " + point); 

      return true; 

     case MotionEvent.ACTION_MOVE: 
      Point point1 = new Point();   
      point1.x = event.getX(); 
      point1.y = event.getY(); 
      points1.add(point1); 
      invalidate(); 
      Log.d(TAG, "point: " + point1); 

      return true; 

     case MotionEvent.ACTION_UP: 

      Point point2 = new Point();   
      point2.x = event.getX(); 
      point2.y = event.getY(); 
      points2.add(point2); 
      invalidate(); 
      Log.d(TAG, "point: " + point2); 

      return true; 
     } 
    return false; 

     //  return true;*/ 
    } 
} 

class Point { 
    float x, y; 

    @Override 
    public String toString() { 
     return x + ", " + y; 
    } 
} 

Je veux juste tracer une ligne droite entre ces points avec fingure. Si mon fingure bouge loin de ce point particulier après que je recule mon fingure que la ligne dessinée sera effacée. c'est-à-dire la ligne tracée uniquement entre ces points particuliers.

Répondre

0

Juste un heads-up ici dans SO, Il est généralement préférable si vous viendriez et demandez ici seulement après avoir essayé quelque chose et n'a pas réussi. De cette façon, vous voulez obtenir des commentaires tels que "Qu'est-ce que vous avez essayé ..?" et des trucs comme ça.

En ce qui concerne votre question. http://developer.android.com/reference/android/graphics/Canvas.html est un bon endroit pour commencer. la documentation Android est très utile. Comme vous pouvez le voir, vous avez une méthode drawLine(). qui devrait faire ce que vous avez demandé. Bonne chance!

0
public class HelloGoogleMaps extends MapActivity { 
    /** Called when the activity is first created. */ 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     MapController mMapController; 
     MapView mapView = (MapView) findViewById(R.id.mapview); 
     mapView.setBuiltInZoomControls(true); 
     mMapController = mapView.getController(); 
     mMapController.setZoom(18); 
     // Two points in Mexico about 1km apart 
     GeoPoint point1 = new GeoPoint(19240000,-99120000); 
     GeoPoint point2 = new GeoPoint(19241000,-99121000); 
     mMapController.setCenter(point2); 
     // Pass the geopoints to the overlay class 
     MapOverlay mapOvlay = new MapOverlay(point1, point2); 
     mapView.getOverlays().add(mapOvlay); 
    } 

    public class MapOverlay extends com.google.android.maps.Overlay { 

     private GeoPoint mGpt1; 
     private GeoPoint mGpt2; 

     protected MapOverlay(GeoPoint gp1, GeoPoint gp2) { 
     mGpt1 = gp1; 
     mGpt2 = gp2; 
     } 
     @Override 
     public boolean draw(Canvas canvas, MapView mapView, boolean shadow, 
      long when) { 
     super.draw(canvas, mapView, shadow); 
     Paint paint; 
     paint = new Paint(); 
     paint.setColor(Color.RED); 
     paint.setAntiAlias(true); 
     paint.setStyle(Style.STROKE); 
     paint.setStrokeWidth(2); 
     Point pt1 = new Point(); 
     Point pt2 = new Point(); 
     Projection projection = mapView.getProjection(); 
     projection.toPixels(mGpt1, pt1); 
     projection.toPixels(mGpt2, pt2); 
     canvas.drawLine(pt1.x, pt1.y, pt2.x, pt2.y, paint); 
     return true; 
     } 
    } 
    @Override 
    protected boolean isRouteDisplayed() { 
     // TODO Auto-generated method stub 
     return false; 
    } 
} 

Son code Runnnig Mon Apps..All Le meilleur

0

est-il votre toile assis dans un View? Si oui, voici un point de départ en supposant que vous demandez sur l'utilisation de mouvements des doigts pour tracer des lignes entre les points ...

Regardez la méthode suivante de l'aide:

public boolean onTouchEvent(MotionEvent event) 

pour détecter les mouvements des doigts. Vous devrez faire la distinction entre le type d'action de mouvement qui vient de se produire et l'action de mouvement "index". Ensuite, si le mouvement est un mouvement en mouvement (par exemple, les doigts se déplacent entre les points), vous pouvez appeler drawPath ou drawLine pour dessiner vos lignes.

Questions connexes