2013-03-28 39 views
0

我正在嘗試創建一個程序,其中當我觸摸設備的屏幕時,一個球就會彈出並且會生成動畫。我把圖像放在一個單獨的類中,因爲後來我將需要MyImage類的多個實例,所以無論何時我觸摸屏幕,都會出現另一個球。如何繪製一個對象來自另一個類的畫布?

我有MyImage類,其中它包含一個圖像。這個類被擴展到View類。覆蓋方法onDraw是圖像被動畫的地方(在屏幕上彈跳)。

public class MyImage extends View { 
Bitmap g; 
float posY = 0; 
float posX = 0; 

boolean ud = true, lr = true; 

public MyImage(Context context) { 
    super(context); 
    g = BitmapFactory.decodeResource(getResources(), R.drawable.ba); 
} 
@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    canvas.drawColor(Color.WHITE); 
    canvas.drawBitmap(g, posX, posY, null); 

    ...... //code for animating 


    invalidate(); 
} 
} 

我想創建這個類的一個對象,以便這將從我們的MainActivity類的其他畫布動畫。

public class MainActivity extends Activity implements OnTouchListener{ 
..... //declarations 

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

    mySurfaceView = new MySurfaceView(this); 
    mySurfaceView.setOnTouchListener(this); 
    setContentView(mySurfaceView); 
} 

@Override 
protected void onPause() { 
    .... 
} 
@Override 
protected void onResume() { 
    .... 
} 

Thread myThread; 
Canvas canvas; 

public class MySurfaceView extends SurfaceView implements Runnable{ 
    SurfaceHolder myHolder; 
    boolean isRunnable = false; 

    public MySurfaceView(Context context) { 
     super(context); 
     myHolder = getHolder(); 
    } 
    public void pause(){ 
     .... 
    } 

    public void resume(){ 
     isRunnable = true; 
     myThread = new Thread(this); 
     myThread.start(); 
    } 

    @Override 
    public void run() { 
     while(isRunnable){ 
      if(!myHolder.getSurface().isValid()){ 
       continue; 
      } 
      canvas = myHolder.lockCanvas(); 
      canvas.drawRGB(100, 0, 0); 

      myHolder.unlockCanvasAndPost(canvas); 
     } 
    } 
} 

@Override 
public boolean onTouch(View v, MotionEvent me) { 
    ..... 

    switch(me.getAction()){ 
    case MotionEvent.ACTION_DOWN: 
     break; 
    case MotionEvent.ACTION_UP: 
     mi = new MyImage(this); 

     canvas.drawBitmap(..) ;//Is it possible to convert object to Bitmap? 

     break; 
    } 
    return true; 
} 
} 

的問題是,我不知道我該怎麼做西港島線MYIMAGE的對象爲位圖,這樣我可以繪製到畫布上。而且我也不確定我所做的是正確的,因爲在我的MyImage類中,我已經有了一個畫布,我認爲它將覆蓋主要活動的畫布。 任何人都可以幫忙嗎?

回答

2

是的,我可能會改變這種做法。爲每個球創建視圖沒有太大意義。我會創建一個自定義視圖。這個視圖可以包含一個球列表。在該視圖的onDraw()方法中,您可以繪製所有球。這些球在開始時可以是具有默認半徑的PointPointF對象。沿

private class MyView extends View { 
    List<Point> balls; 

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

     for(Point p : balls){ 
      canvas.drawCircle(p.x, p.y, 10, myPaint); 
     } 
    } 
} 

東西

相關問題