안드로이드 개발 질문/답변
(글 수 45,052)
public class MyActivity extends Activity { ArrayList<touchP> arVertex; TextView mText; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.myactivity); Log.d("myTag","print test log"); mText = (TextView)findViewById(R.id.text); Log.d("myTag","eventt"); } public class touchP { float x; float y; touchP(float ax, float ay) { x = ax; y = ay; } } public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { Log.d("myTag","event1"); arVertex.add(new touchP(event.getX(), event.getY())); Log.d("myTag","eventend"); } if (event.getAction() == MotionEvent.ACTION_MOVE) { Log.d("myTag","event2"); //Log.d("myTag",event.getX()); arVertex.add(new touchP(event.getX(), event.getY())); return false; } if(event.getActionIndex() == MotionEvent.ACTION_UP){ Log.d("myTag","event3"); mText.setText("좌표값:" + arVertex.toString()); return true; } return false; } }
터치한 곳의 위치를 저장한 후 화면에 그 값을 뿌려주는 코드입니다.
이제막 시작해서 아주 사소한것에서부터 막혔네요..
디버깅해보면 26번째 줄에서 NullPointException에러가 뜨네요..
아마도 View를 사용하지 않아서 일것 같긴한데요
이제막 프로그램을 접하다보니 위 방법외에는 다른방법으로 접근하기가 조금 어렵네요 ^^
어떤 방향으로 수정하면 될지 알려주시면 감사하겠습니다
2011.03.10 00:54:49
Nullpoint는 위에분 답변대로 초기화때문에 그런게 맞구요. ActionMove를 왜 넣으셨는지, 그리고 세번째에서 getActionIndex()를 왜 쓰셨는지 의문이네요...
단순히 터치 다운상태에 해당좌표를 저장하는건 23line if문으로 다 저장되고요. touch를 떼는순간(action_up)이 일어났을때 화면에 찍어주게 하려면 if문에 event.getAction() == MotionEvent.ACTION_UP;
블록 안에 mText.setText("좌표값 " + arVertex(i).x + ", " + arVertext(i).y); 하시고 인덱스변수 i는 인스턴스 변수로 선언해주시구요..
toString을 쓰시려면 overriding하셔야 합니다. 그렇지 않으면 위에서는 의미없는 Object객체의 toString(return value는 hashing값 + string) method가 호출되죠.
arVertex 값을 사용하기 전에 초기화(new)를 해줘야 하지 않나요?