2011-07-20 21 views
5

Kullanıcının ekrana dokunmasını ve kullanıcıların parmak koordinatlarını temel alarak görüntü çizmesini sağlayan bir uygulama yapmaya çalışıyorum. İşte benim kod: Ben emülatörü bir ekranda tıklayarak istediğiniz her seferindedokunmatik ekranda çizim android

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; 

     } 
    } 
} 

Fakat, THX

cevap

0

zaman ...

lütfen hatamı işaret .... gösterilen görüntü yok Bu soruya birçok kez cevap yazmışlar, Bu kod% 100 çalışıyor. u hala herhangi bir sorgu varsa o zaman u bana

başvurabilirsiniz AMA BU KOD GOOGLE MAPS üzerine bir görüntü İÇİN ÇALIŞACAK: Ayrıca

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; 


    } 

ve başka (2) bindirme sınıfını tanımlamak ... Bu olay alacak.

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

yılında invalidate() yok ?? –

+0

@ SimonAndréForsberg Dude, neden bu cevap için oy verdin? görmüyorsun bu kod, dokunma olayıyla ilgili Google Haritalar üzerinden bir resim çizecektir. Senin sorunun ne olduğunu bilmiyorum. Eğer onu anlamıyorsan, bana bir eşdeğeri yap, ben bunu detaylandırırım. –

1

Bu soru, Google haritaları ile ilgisi var ne 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

xPos ve yPos'u doğrudan onDraw uygulamasında kullanmam durumunda onTouchEvent uygulamasında geçersiz kılmaya neden ihtiyacımız var? – mehulmpt

İlgili konular