2011-08-01 3 views
0

나는 안드로이드 응용 프로그램을 시작하려고하고 그 전에 다음 작업을 수행해야합니다. View 클래스에서 확장하고 View.onTouchListener 인터페이스를 구현하는 클래스가 있습니다. 이제 onDraw() 메서드에서 원을 그려서 원이 응용 프로그램의 시작 부분에 표시되도록했습니다. 이제는 사용자가 원을 만졌을 때 (실제로 클릭) 무언가를하고 싶습니다. 그래서, 내가 여기서하려고하는 첫 번째 일은 원을 만지작 거리며 건배 메시지를 표시하는 것입니다. 다음 코드를 사용해 보았지만 아무 일도 일어나지 않았습니다. Pls 내가 솔루션을 찾을 수 있습니다. onTouch의 MouseEvent가 사용자 정의보기의 캔바스에 그려진 원 안에 있는지 여부를 감지합니다.

는보기 클래스입니다 :

package com.exam.trial; 

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

public class pad extends View implements View.OnTouchListener{ 

Paint paint; 
public pad(Context context) { 
    super(context); 
    // TODO Auto-generated constructor stub 
    paint = new Paint(); 
} 


public boolean onTouch(View v, MotionEvent event) { 
switch(event.getAction()){ 
    case MotionEvent.ACTION_DOWN: { 
     if (event.getX()>70 && event.getX()<130 && event.getY()>70 && event.getY()<130) 
     { 
      Toast toast = Toast.makeText(getContext(), "Works fine", Toast.LENGTH_SHORT); 
      toast.show(); 
     } 
     return true; 
    } 

} 
return false; 
} 


@Override 
public void onDraw(Canvas canvas) 
{ 
    paint.setColor(Color.YELLOW); 
    canvas.drawCircle(100, 100, 50, paint); 
} 

} 

그리고 여기 내 시작 활동 :

package com.exam.trial; 

import android.app.Activity; 
import android.os.Bundle; 

public class TrialActivity extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    pad p = new pad(this); 

    setContentView(p); 
} 
} 
+0

는 http://stackoverflow.com/questions/4207067/how-to-implement-touch-listener-on-image – kannappan

답변

-1

이 감동 할 수 있음을 의미 뷰 포커스를 만들기 위해 다음 코드를 추가하고 설정하십시오 ontouch listener를 새로 만든 패드 p에 추가하십시오. 뭔가 같은

setFocusable(true); 
setOnTouchListener(p); 
+0

난 내 주요 교류에 setOnTouchListener을 사용할 수 없습니다이 링크를 시도하십시오 tivity. 나는 진술서를 어디에 넣을 까? –

-1

사용이 :

p.setFocusable(true); 
p.setOnTouchListener(p); 
7

는 onTouch 콜백은 어떤 손가락이 원 X로보기에 감동 캡처/Y 좌표. 사용자가보기에서 원을 탭했는지 여부를 알기 원하면 지정된 X/Y 좌표가 원 안에 있는지 확인해야합니다. 여기

는 대한 간단한 함수입니다 :

private boolean inCircle(float x, float y, float circleCenterX, float circleCenterY, float circleRadius) { 
    double dx = Math.pow(x - circleCenterX, 2); 
    double dy = Math.pow(y - circleCenterY, 2); 

    if ((dx + dy) < Math.pow(circleRadius, 2)) { 
     return true; 
    } else { 
     return false; 
    } 
} 

당신은, 원의 y 위치는 클래스 필드 중심의 X있는 있도록 코드를 수정하려면, 그에 따라 onTouch 방법을 업데이트합니다 :

private float mCircleCenterX; 
private float mCircleCenterY; 
private float mCircleRadius; 

public boolean onTouch(View v, MotionEvent event) { 
    switch(event.getAction()){ 
     case MotionEvent.ACTION_DOWN: 
      if (inCircle(event.getX(), event.getY(), mCircleCenterX, mCircleCenterY, mCircleRadius)) { 
       Toast toast = Toast.makeText(getContext(), "Works fine", Toast.LENGTH_SHORT).show(); 
      } 
      return true; 
    } 
    return false; 
} 
+0

InCircle 방법이 저에게 효과적이었습니다. 감사.. – sha

관련 문제