public void mStart(View v) {
startService(new Intent(this, AlwaysTopServiceTouch.class));
}
public void mStop(View v) {
stopService(new Intent(this, AlwaysTopServiceTouch.class));
}
main 레이아웃에 1버튼이 mStart메소드로 누르면 아래 사진에 뜹니다 버튼은 제가 새로 추가한건데

레이아웃 닫을 때는 2번째 버튼이 mStop메소드를 사용합니다 그래서 버튼을 생성하고 그 버튼 id값을
객체화해서 클릭시 mStop메소드 내용을 그대로 했는데 애러가 걸리더라고요 어떻게 하면 되죠?
아래는 소스
public class AlwaysTopServiceTouch extends Service {
private View mView;
private WindowManager mManager;
private WindowManager.LayoutParams mParams;
private float mTouchX, mTouchY;
private int mViewX, mViewY;
private boolean isMove = false;
private View.OnTouchListener mViewTouchListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
isMove = false;
mTouchX = event.getRawX();
mTouchY = event.getRawY();
mViewX = mParams.x;
mViewY = mParams.y;
break;
case MotionEvent.ACTION_UP:
if (!isMove) {
Toast.makeText(getApplicationContext(), "터치됨",
Toast.LENGTH_SHORT).show();
}
break;
case MotionEvent.ACTION_MOVE:
isMove = true;
int x = (int) (event.getRawX() - mTouchX);
int y = (int) (event.getRawY() - mTouchY);
final int num = 5;
if ((x > -num && x < num) && (y > -num && y < num)) {
isMove = false;
break;
}
/**
* mParams.gravity에 따른 부호 변경
*
* LEFT : x가 +
*
* RIGHT : x가 -
*
* TOP : y가 +
*
* BOTTOM : y가 -
*/
mParams.x = mViewX + x;
mParams.y = mViewY + y;
mManager.updateViewLayout(mView, mParams);
break;
}
return true;
}
};
@Override
public void onCreate() {
super.onCreate();
LayoutInflater mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mView = mInflater.inflate(R.layout.always_on_top_view_touch, null);
mView.setOnTouchListener(mViewTouchListener);
mParams = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
mParams.gravity = Gravity.TOP | Gravity.LEFT;
mManager = (WindowManager) getSystemService(WINDOW_SERVICE);
mManager.addView(mView, mParams);
}
@Override
public void onDestroy() {
super.onDestroy();
if (mView != null) {
mManager.removeView(mView);
mView = null;
}
}
@Override
public IBinder onBind(Intent arg0) {
return null;
}
}
public class AlwaysTopServiceNotTouch extends Service {
private View mView;
private WindowManager mManager;
@Override
public void onCreate() {
super.onCreate();
LayoutInflater mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mView = mInflater.inflate(R.layout.always_on_top_view_not_touch, null);
WindowManager.LayoutParams mParams = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
// 항상 최상위 화면에 있도록 설정합니다
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
// 터치 이벤트를 받지 않습니다
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT); // 투명
mManager = (WindowManager) getSystemService(WINDOW_SERVICE);
mManager.addView(mView, mParams);
}
@Override
public void onDestroy() {
super.onDestroy();
if (mView != null) {
mManager.removeView(mView);
mView = null;
}
}
@Override
public IBinder onBind(Intent arg0) {
return null;
}
}