안드로이드 엑티비티대신 서비스에서 always view on top view를 구현하면서 서비스를 구현해 보았다.
일반적으로 안드로이드 이벤트에서는 아래와 같은 종류의 리스너들이 있다.
View.OnClickListener - 살짝 클릭을 했을때
View.OnCreateContextMenuListener - 꾸욱 눌렀을때
View.OnFocusChangeListener - 뭔가 포커스가 변경되었을때
View.OnKeyListener - 키보드로 입력했을때
View.OnLongClickListener - 클릭보다 길게 눌렀을때
View.OnTouchListener - 터치를 했을때
onTouchListener와 onClickListener 구현 방법 차이를 좀 더 알아보도록 하겠다.
쓰임새로 보면
onClickListener는 단순 클릭 이벤트를 받아 이벤트 구현이 가능한 반면,
onTouchListener는
ACTION_UP
ACTION_DOWN
ACTION_MOVE 등 사용자의 손가락 방향, 드래그 등 행동에 맞게 구현, 이벤트 설정이 가능하다.
두 방법 다 서비스나 액티비티 단에서 구현가능하다. 아래는 참고 코드이다.
private WindowManager mWindowManager;
private WindowManager.LayoutParams mParams;
private TextView mPopupView;
private int clickIndex = 0;
mPopupView = new TextView(this);
mPopupView.setText("Go To");
mPopupView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);
mPopupView.setTextColor(Color.TRANSPARENT);
mPopupView.setBackgroundColor(Color.TRANSPARENT);
mParams = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE, // touch event can be always received
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, // not get focus
PixelFormat.TRANSLUCENT // transparent
);
mParams.gravity = Gravity.LEFT | Gravity.TOP; // Location
mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
mWindowManager.addView(mPopupView, mParams); //put view into window
mPopupView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(serviceTag, "OnClickListener");
clickIndex++;
if (clickIndex == 1) {
startTimer();
}
Log.i("check number", String.valueOf(clickIndex));
if (clickIndex == 3) {
Intent settingIntent = new Intent(context, SettingActivity.class);
settingIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(settingIntent);
}
}
});
mPopupView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Log.d(serviceTag, "Action_DOWN");
clickIndex++;
if(clickIndex==1){
startTimer();
}
Log.i("check number", String.valueOf(clickIndex));
if(clickIndex==3){
Intent settingIntent = new Intent(context, SettingActivity.class);
settingIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(settingIntent);
}
break;
}
return false;
}
});
참고 페이지 :
http://stackoverflow.com/questions/9122679/difference-between-ontouch-and-onclick-android
http://stackoverflow.com/questions/29295491/android-onclicklistener-inside-services
'IT이야기 > Android' 카테고리의 다른 글
[Android개발] 앱 시작시키는 방법 (1) | 2016.03.28 |
---|---|
[안드로이드]다운로드매니저 애러 잡기 (0) | 2016.03.02 |
[MAC/Windows] 안드로이드 스튜디오 1.4 테마 바꾸기 (3) | 2015.12.04 |
No manifest file found at .\src\main\AndroidManifest.xml 문제 해결 (1) | 2015.12.01 |
MAC에서 개발시 환경변수 설정하기 & 안드로이드 스튜디오(v1.4)에서 jdk 경로설정 (2) | 2015.12.01 |