2011-07-20 4 views
5

J'essaye de faire une application qui permet à l'utilisateur de toucher l'écran et dessiner l'image basée sur les coordonnées de doigt des utilisateurs. Voici mon code:dessin android sur événement tactile

public class DrawingBoard extends View { 

     Drawable editIcon = getResources().getDrawable(R.drawable.icon); 
     Bitmap mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.background); 

     float xPos = 0; 
     float yPos = 0; 

     public DrawingBoard (Context context) { 
      // TODO Auto-generated constructor stub 
      super (context);    
     } 
     @Override 
     protected void onDraw (Canvas canvas) { 
      super.onDraw(canvas); 

      canvas.save(); 
      canvas.drawBitmap(mBitmap, 0, 0, null); 
      canvas.translate(xPos, yPos); 
      editIcon.draw(canvas); 
      canvas.restore(); 

      invalidate(); 
     } 
     @Override 
     public boolean onTouchEvent (MotionEvent event) { 

      switch (event.getAction()) { 
       case MotionEvent.ACTION_DOWN : 
        xPos = event.getX(); 
        yPos = event.getY(); 
        break; 
      } 

      return true; 

     } 
    } 
} 

Mais, chaque fois que j'essaie de cliquer sur un écran dans l'émulateur, il n'y a pas d'image montré ....

pls signalent mon erreur ... THX

Répondre

0

I ont posté une réponse à cette question plusieurs fois, Ce code fonctionne à 100%. si u ont encore une requête alors u peut me contacter

MAIS CE CODE AURA POUR ÉLABORER UN TRAVAIL IMAGE SUR GOOGLE MAPS:

public boolean onTouchEvent(MotionEvent event, MapView mapView) 
    { 

     if (event.getAction() == 1) 
     {     
      GeoPoint p = mapView.getProjection().fromPixels(
       (int) event.getX(), 
       (int) event.getY()); 
       Toast.makeText(getBaseContext(), "lat and longtd is \n "+ 
        p.getLatitudeE6()/1E6 + "," + 
        p.getLongitudeE6() /1E6 , 
        Toast.LENGTH_LONG).show(); // 
       mapView.getOverlays().add(new MarkerOverlay(p)); 
       mapView.invalidate(); 
     } 
       return true; 


    } 

et définir également une autre (2) Classe de superposition ... où cet événement aura.

class MarkerOverlay extends Overlay 
{ 
    private GeoPoint p; 
    private Projection projection; 

    public MarkerOverlay(GeoPoint p) 
    { 
     this.p = p; 
    } 

    @Override 
    public boolean draw(Canvas canvas, MapView mapView,boolean shadow, long when) 
    { 
     super.draw(canvas, mapView, shadow);     

     //---translate the GeoPoint to screen pixels--- 
     Point screenPts = new Point(); 
     mapView.getProjection().toPixels(p, screenPts); 

     //---add the marker--- 
     Bitmap bmp = BitmapFactory.decodeResource(getResources(),R.drawable.pir_pictr);    
     canvas.drawBitmap(bmp, screenPts.x, screenPts.y-50, null); 

     return true; 
    } 



} 
+4

Qu'est-ce que cette question a à voir avec Google maps ?? –

+0

@ SimonAndréForsberg Mec, pourquoi donnez-vous le vote pour cette réponse. tu ne vois pas. ce code va dessiner une image sur Google Maps sur un événement tactile. Je ne sais pas quel problème avec toi. Si vous ne le comprenez pas, alors faites moi un écuyer, je l'élaborerai. –

1

Vous n'avez pas invalidate() dans onTouchEvent()

 @Override 
     protected void onDraw (Canvas canvas) { 
      super.onDraw(canvas); 

      canvas.save(); 
      canvas.drawBitmap(mBitmap, 0, 0, null); 
      canvas.translate(xPos, yPos); 
      editIcon.draw(canvas); 
      canvas.restore(); 

     //  invalidate(); 
     } 
     @Override 
     public boolean onTouchEvent (MotionEvent event) { 

      switch (event.getAction()) { 
       case MotionEvent.ACTION_DOWN : 
        xPos = event.getX(); 
        yPos = event.getY(); 
        invalidate(); // add it here 
        break; 
      } 

      return true; 

     } 
+0

Pourquoi avons-nous besoin d'invalider onTouchEvent si j'utilise xPos et yPos directement dans onDraw? – mehulmpt

Questions connexes