2012-12-12 12 views
5

Jestem nowicjuszem dla Androida java i naprawdę nie wiem jak sprawić, aby przycisk pojawił się na moim WIDOKie po długim czasie wyszukiwania w Internecie. Widzę mój przycisk w układzie, ale nie w moim widoku podczas debugowania. Nie jestem pewien, jak umieścić więcej niż jeden obraz po kliknięciu przycisku. Proszę mnie poprawić, jeśli zrobiłem źle w moim kodzie. Każda pomoc będzie bardzo doceniona. DZIĘKI!Dodaj obrazy na płótnie z Androidem

mojego kodu poniżej:

package com.example.oncanvas; 

import android.app.Activity; 

public class Main extends Activity { 

    @Override 
     public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     DrawView DrawView = new DrawView(this); 
     DrawView.setBackgroundColor(Color.WHITE); 
     setContentView(DrawView); 
     DrawView.requestFocus(); 

} 

    public class DrawView extends View { 

     private Bitmap mBitmap; 
     private Canvas mCanvas; 
     private Path mPath; 
     private Paint mBitmapPaint; 
     private Paint mPaint; 

     public DrawView(Context c) { 
      super(c); 

      mPath = new Path(); 
      mBitmapPaint = new Paint(Paint.DITHER_FLAG); 


      mPaint = new Paint(); 
      mPaint.setAntiAlias(true); 
      mPaint.setDither(true); 
      mPaint.setColor(0xFF000000); 
      mPaint.setStyle(Paint.Style.STROKE); 
      mPaint.setStrokeJoin(Paint.Join.ROUND); 
      mPaint.setStrokeCap(Paint.Cap.ROUND); 
       mPaint.setStrokeWidth(3); 
     } 

    protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
     super.onSizeChanged(w, h, oldw, oldh); 
     mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); 
     mCanvas = new Canvas(mBitmap); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); 

     canvas.drawPath(mPath, mPaint); 
    } 

    private float mX, mY; 
    private static final float TOUCH_TOLERANCE = 4; 

    private void touch_start(float x, float y) { 
     mPath.reset(); 
     mPath.moveTo(x, y); 
     mX = x; 
     mY = y; 
    } 
    private void touch_move(float x, float y) { 
     float dx = Math.abs(x - mX); 
     float dy = Math.abs(y - mY); 
     if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) { 
      mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2); 
      mX = x; 
      mY = y; 
     } 
    } 
    private void touch_up() { 
     mPath.lineTo(mX, mY); 
     // commit the path to our offscreen 
     mCanvas.drawPath(mPath, mPaint); 
     // kill this so we don't double draw 
     mPath.reset(); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     float x = event.getX(); 
     float y = event.getY(); 

     switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       touch_start(x, y); 
       invalidate(); 
       break; 
      case MotionEvent.ACTION_MOVE: 
       touch_move(x, y); 
       invalidate(); 
       break; 
      case MotionEvent.ACTION_UP: 
       touch_up(); 
       invalidate(); 
       break; 
     } 
     return true; 
    } 

    public void clear(){ 
     mBitmap.eraseColor(Color.TRANSPARENT); 
     invalidate(); 
     System.gc(); 
    }} 

}

To XML dla układu

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:id="@+id/linearLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/ic_launcher" 
    > 

<Button 
    android:text="Button" 
    android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 

</Button> 

<com.example.oncanvas 
    android:id="@+id/drawView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content">   

     </com.example.oncanvas> 
</LinearLayout> 

Odpowiedz

4

jej tylko clue..Add kod

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

     // convert point to pixels 
     Point screenPts = new Point(); 
     mapView.getProjection().toPixels(pointToDraw, screenPts); 

     // add marker 
     Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.marker); 
     canvas.drawBitmap(bmp, screenPts.x, screenPts.y - 24, null); // 24 is the height of image  
     return true; 
    } 
} 
+0

Dziękuję za odpowiedź! Pracuję nad tym. Tak czy inaczej, czy masz jakiś pomysł, dlaczego nie mogłem zobaczyć mojego przycisku w moich widokach podczas debugowania? – ping

+0

Sprawdź, czy widok przycisków jest niewidoczny – Anu

+0

to nie działa ... = ( – ping

2

Wewnątrz OnDraw(), jeśli musisz narysować mutti pl obrazy należy wywoływać: canvas.drawBitmap() wiele razy z różnych wartości marginesów.

for(int i=0;i<4;i++){ 
    canvas.drawBitmap(bmp, (i*5), (i*10), null) 
}