공부/안드로이드(Android)

이벤트 - 키, 터치

도도-도윤 2017. 11. 8. 16:07

이벤트 - 키, 터치


"키"와 "터치"로 이벤트를 다루는 방법에 대해서 소개합니다.



1. 구현




 Key Event 구현 - 영상

 


 Touch Event 구현 영상


터치 이벤트의 경우에는 최근에 스마트폰 게임을 많이 한다고 하는데, 이때 꼭 빠질 수 없는 것이 터치이다.

모션 이벤트를 다루는 방법에 대해서 소개하고 있다.



2. 소스코드



public class MainActivity extends AppCompatActivity {

int x = 100, y = 100;

protected class UsrView extends View{

public UsrView(Context context){
super(context);
setBackgroundColor(Color.GREEN);
}

protected void onDraw(Canvas canvas)
{
Paint paint = new Paint();
paint.setColor(Color.BLUE);
canvas.drawRect(x, y, x + 50, y + 50, paint);
}
}


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main)

UsrView view = new UsrView(this);
view.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View view, int keyCode, KeyEvent keyEvent) {

if ( keyEvent.getAction() == keyEvent.ACTION_UP )
{
switch ( keyCode ){

case KeyEvent.KEYCODE_J:
x -= 30;
break;

case KeyEvent.KEYCODE_K:
x += 30;
break;

case KeyEvent.KEYCODE_I:
y -= 30;
break;

case KeyEvent.KEYCODE_M:
y += 30;
break;

} // end of switch
view.invalidate();
return true;
}

return false;
}
});

}

}

 키 이벤트 - 소스

 

public class MainActivity extends AppCompatActivity {

int x = 100, y = 100;
String str;

protected class UsrView extends View{

public UsrView(Context context){
super(context);
setBackgroundColor(Color.GREEN);
}

protected void onDraw(Canvas canvas)
{
Paint paint = new Paint();
paint.setColor(Color.BLUE);
canvas.drawRect(x, y, x + 50, y + 50, paint);
canvas.drawText("액션의 종류:" + str, 0, 20, paint);
}

public boolean onTouchEvent(MotionEvent event){

x = (int)event.getX();
y = (int)event.getY();

if ( event.getAction() == MotionEvent.ACTION_DOWN )
str = "ACTION_DOWN";
if ( event.getAction() == MotionEvent.ACTION_MOVE )
str = "ACTION_MOVE";
if ( event.getAction() == MotionEvent.ACTION_UP )
str = "ACTION_UP";

invalidate();
return true;
}

}


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main)

UsrView view = new UsrView(this);
setContentView(view);

}

}

 터치 이벤트 - 소스


키 이벤트

-> 메소드: boolean onKey( View v, int keyCode, KeyEvent event) { }

-> 리스너 객체 등록: onKeyListener( );


터치 이벤트

-> 콜백 메소드 재정의: Boolean onTouchEvent(MotionEvent e)

-> 리스너 객체 등록: 인터페이스 onTouchEventListener( View v, MotionEvent e )를 정의


구현 방법도 살펴볼 수 있을 것으로 보인다.


액션

설명

ACTION_DOWN

누르는 동작이 시작됨.

ACTION_UP

누르고 있다가 땔 때 발생함.

ACTION_MOVE

누르는 도중에 움직임.

ACTION_CANCEL

터치 동작이 취소됨.

ACTION_OUTSIDE

터치가 현재의 위젯을 벗어남.