2012-02-03 2 views
0

방금 ​​Android로 시작했고 캔버스에서 리스너를 사용하는 방법에 대해 궁금합니다. 특히 내 프로젝트의 일환으로, 한 지점에서 다른 지점으로 클릭을 끌 때 이벤트가 발생하는 것이 목표입니다. 개념은 brainvita라는 게임에서 가져온 것입니다. 내 질문에 대답하기 위해 게임을 이해할 필요는 없습니다. 내가 알고 싶은 건 캔버스에서 한 지점에서 다른 지점으로 끌기 클릭에 대한 청취자를 만드는 가장 간단한 방법입니다.캔버스에 Android Listener가 있습니까?

캔버스를 그리드에 매핑하고 여러 수신기가 있어야합니까? 가장 간단한 방법은 무엇입니까?

또한 지금까지 개발 된 게임의 코드를 첨부하고 있습니다. 격자를 표시하는 데 도움이되는 기본 사항 만 있습니다!

package com.project.android.brainvita; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.view.View; 

public class GameView extends View { 

Paint paint = new Paint(); 
Paint paintF = new Paint(); 
Paint paintG = new Paint(); 
int width, height; 
int MARGIN = 4; 
int MARGIN_BIG = 10; 
int sx = 2; 

public GameView(Context context) { 
    super(context); 
    paint.setColor(Color.WHITE); 
    paintF.setColor(Color.rgb(40, 60, 204)); 
    paintG.setColor(Color.rgb(240, 30, 20)); 
} 

public void onDraw(Canvas canvas) { 
    // Draw external circle 
    canvas.drawCircle(width/2, height/2, (width - MARGIN)/2, paintF); 

    // Calculate radius of small circles 
    int radius = (width - MARGIN_BIG*2)/14; 

    // Draw grid 
    for (int j = -3; j <= 3; j++) { 
     if (j >= -1 && j <= 1) 
      for (int i = -3; i <= 3; i++) { 
       canvas.drawCircle(width/2 + (2 * radius * i), height/2 
         + (2 * radius * j), radius - sx, paint); 
      } 
     else 
      for (int i = -1; i <= 1; i++) { 
       canvas.drawCircle(width/2 + (2 * radius * i), height/2 
         + (2 * radius * j), radius - sx, paint); 
      } 
    } 
} 

protected void onSizeChanged(int w, int h, int ow, int oh) { 
    width = w; 
    height = h; 
} 

} 

답변

1

안드로이드 개발에서 캔버스가 사용되었습니다. 보기는 사용자와 상호 작용하는 데 사용됩니다. 캔버스가 사용자 입력을받는 직접 메커니즘이 없습니다. 이것은보기를 통해 처리해야합니다.

캔버스를 호스팅하는보기에 onTouchListener를 추가하고 해당 수신기를 사용하여 사용자의 감동에 대한 상태 정보를 저장하려고합니다.

+0

그럼 어떻게하면 onTouchListener를 사용하여 드래그 클릭을 위해 캔버스에서 위치를 얻을 수 있습니까? 한 지점에서 다른 지점으로 끌기 클릭을위한 캔버스 좌표가 필요합니다. 두 좌표를 모두 사용하여 유효한 이동인지 여부를 결정하고 출력을 가져옵니다. – degant

+2

캔버스의 범위를 벗어난 게임 컨텍스트를 유지해야합니다. 게임의 캔버스를 게임 패드로 생각하는 대신 '내가 게임 보드를 캔버스에 그릴 것입니다'와 같이 게임의 컨텍스트를 그리는 것으로 캔버스를 생각해보십시오. onTouchListener는 공유 게임 보드를 참조하여 이동이 유효한지와 그리기 메소드가 게임 보드를 그려야하는지 결정해야합니다. 터치 할 수있는 영역을 클릭하여 무엇이 클릭되었는지 파악한 다음 게임 보드를 참조하여 유효한지 알아냅니다. –

관련 문제