2010/07/05

[Android Dev.] Touch 이벤트 사용하기

Android 의 Touch 이벤트를 테스트 해 보았다.

Touch 이벤트는 TouchListener 를 등록하여 onTouch 함수를 오버라이드 하여 구현을 하거나 onTouchEvent 함수를 오버라이드 하여 구현할 수 있다.




두 방법간의 큰 차이는 없고 어떠한 함수를 통해서 Touch 이벤트를 핸들링 하는가만 다른 것 같다. Touch Listener 를 등록하여 구현하는 경우는 Activity 에 전달 되는 Touch 에서 전체적으로 핸들링 할 수 있지만 내부 View 의 onTouchEvent 를 오버라이드하여 구현하는 경우에는 해당 뷰의 Touch 이벤트에 국한 된다는 차이가 있는데 이는  Touch 구현 범위에 따라 선택을 하여야 할 것 같다.










ACTION_DOWN

ACTION_DOWN

ACTION_MOVE

ACTION_MOVE

ACTION_MOVE

ACTION_UP







Touch Listener 를 등록하여 구현하는 방법



import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnTouchListener;
import android.widget.LinearLayout;
import android.widget.TextView;

public class TouchTest extends Activity implements OnTouchListener
{
/** Called when the activity is first created. */
TextView tvStatus;
Canvas2D canvas;

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

LinearLayout layout = new LinearLayout(this);
layout.setOrientation( LinearLayout.VERTICAL );

LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT );
layout.setLayoutParams( param );

tvStatus = new TextView(this);
layout.addView( tvStatus );
tvStatus.setText( "Touch Status" );

canvas = new Canvas2D( this );
ViewGroup.LayoutParams canvasParam = new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.FILL_PARENT );
layout.addView( canvas, canvasParam );

canvas.setOnTouchListener( this );

setContentView( layout );
}

class Canvas2D extends View
{
public Canvas2D(Context context)
{
super(context);
}

@Override
public void onDraw( Canvas canvas )
{
// Canvas 배경 설정
canvas.drawColor( Color.parseColor("#888888") );
}
}

@Override
public boolean onTouch( View v, MotionEvent event )
{
if ( v == canvas )
{
Log.i( "event", "Canvas2D onTouch" );

switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
{
String strMsg;
strMsg = "ACTION_DOWN X: " + event.getX() + " Y:" + event.getY();

tvStatus.setText( strMsg );
}
break;

case MotionEvent.ACTION_MOVE:
{
String strMsg;
strMsg = "ACTION_MOVE X: " + event.getX() + " Y:" + event.getY();

tvStatus.setText( strMsg );
}
break;

case MotionEvent.ACTION_UP:
{
String strMsg;
strMsg = "ACTION_UP X: " + event.getX() + " Y:" + event.getY();

tvStatus.setText( strMsg );
}
break;
}
}

return true;
}
}







onTouchEvent 함수를 오버라이드 하여 구현하는 방법



import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnTouchListener;
import android.widget.LinearLayout;
import android.widget.TextView;

public class TouchTest extends Activity
{
/** Called when the activity is first created. */
TextView tvStatus;
Canvas2D canvas;

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

LinearLayout layout = new LinearLayout(this);
layout.setOrientation( LinearLayout.VERTICAL );

LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT );
layout.setLayoutParams( param );

tvStatus = new TextView(this);
layout.addView( tvStatus );
tvStatus.setText( "Touch Status" );

canvas = new Canvas2D( this );
ViewGroup.LayoutParams canvasParam = new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT,
ViewGroup.LayoutParams.FILL_PARENT );
layout.addView( canvas, canvasParam );

canvas.setOnTouchListener( this );

setContentView( layout );
}

class Canvas2D extends View
{
public Canvas2D(Context context)
{
super(context);
}

@Override
public void onDraw( Canvas canvas )
{
// Canvas 배경 설정
canvas.drawColor( Color.parseColor("#888888") );
}

@Override
public boolean onTouchEvent(MotionEvent event)
{
Log.i( "event", "Canvas2D onTouch" );

switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
{
String strMsg;
strMsg = "ACTION_DOWN X: " + event.getX() + " Y:" + event.getY();

tvStatus.setText( strMsg );
}
break;

case MotionEvent.ACTION_MOVE:
{
String strMsg;
strMsg = "ACTION_MOVE X: " + event.getX() + " Y:" + event.getY();

tvStatus.setText( strMsg );
}
break;

case MotionEvent.ACTION_UP:
{
String strMsg;
strMsg = "ACTION_UP X: " + event.getX() + " Y:" + event.getY();

tvStatus.setText( strMsg );
}
break;
}

return true;
}
}
}

<

Original Post : http://neodreamer-dev.tistory.com/450

No comments :

Post a Comment