2016-03-06 74 views
2

我有一個名爲ChickenView的Surfaceview類,我試圖讓我的bMapEgg有一個touchevent。我嘗試使用這個bMapEgg.setOnTouchListener(this); 但它沒有工作。有任何想法嗎?Surfaceview位圖touchevent

public void drawCourt() { 

      if (ourHolder.getSurface().isValid()) { 
       canvas = ourHolder.lockCanvas(); 
       //Paint paint = new Paint(); 
       canvas.drawColor(Color.BLACK);//the background 
       paint.setColor(Color.argb(255, 255, 255, 255)); 
       paint.setTextSize(45); 
       canvas.drawText("Score:" + score + " Lives:" + lives + " fps:" + fps, 20, 40, paint); 

       Bitmap bMapEgg = BitmapFactory.decodeResource(getResources(), R.drawable.egg); 
       bMapEgg = scaleDown(bMapEgg,180,true); 

       Bitmap bMapBackground = BitmapFactory.decodeResource(getResources(), R.drawable.backgrounddd); 
       canvas.drawBitmap(bMapBackground, 0, 0, paint); 
       canvas.drawBitmap(bMapEgg, ballPosition.x, ballPosition.y, paint); 



       ourHolder.unlockCanvasAndPost(canvas); 
      } 

     } 
+0

爲什麼你能夠在位圖上添加觸摸監聽器?觸摸事件被傳遞到視圖,例如,你的SurfaceView。你將不得不處理位置的計算,並且如果從那裏點擊你的位圖 –

回答

0

首先,您需要爲整個SurfaceView設置觸摸監聽器。接下來,要檢查位圖是否被觸摸,你需要做這樣的事情:

float x = touchEvent.getX(); 
float y = touchEvent.gety(); 
// Replace these with the correct values (bitmap x, y, width & height) 
float x1 = bitmapPositionX; 
float x2 = x1 + bitmapWidth; 
float y1 = bitmapPositionY; 
float y2 = y1 + bitmapHeight; 
// Test to see if touch is inside the bitmap 
if (x > x1 && x < x2 && y > y1 && y < y2) { 
    // Bitmap was touched 
    switch (touchEvent.getAction()) { 
    case TouchEvent.ACTION_DOWN: (bitmap was just touched) break; 
    case TouchEvent.ACTION_DOWN: (user lifted finger from bitmap) break; 
    } 
}