2011-07-20 21 views
5

私はユーザーが画面に触れ、ユーザーの指の座標に基づいてイメージを描くことを可能にするアプリケーションを作ろうとしています。私はandroid drawing on touchイベント

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; 

     } 
    } 
} 

しかし、私はエミュレータの画面上でクリックしてくださいいつでも、示さ全くイメージがありません....

のplsは私のミスを指摘... THX

答えて

0

:ここに私のコードです何度もこの質問に対する回答を投稿しました。このコードは100%働いています。 uはまだ任意のクエリを持っているならば、uが私に

に連絡することができますが、このコードはGoogleマップの描画のために動作します:また

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; 


    } 

と別の(第二)オーバーレイクラスを定義する...このイベント取得します。

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

invalidate()を持っていません? –

+0

@SimonAndréForsbergDude、なぜあなたはこのanswer.areであなたに投票を下すのですか?あなたは見えません。このコードはGoogleマップオンタッチイベントで画像を描画します。あなたに何が問題なのか分かりません。あなたがそれを理解していないなら、私に馬を作りなさい、私はそれを詳述するでしょう。 –

1

あなたはこの質問をGoogleマップとしなければならない何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

onDrawでxPosとyPosを直接使用する場合、なぜonTouchEventで無効化する必要がありますか? – mehulmpt