이전글.. 필요한분 여기.
2012/04/12 - [Android Study] - Android Custom Widget 만들기 3편
남은 코드 이어서...
// Touch 이벤트 처리 함수
남은 코드는 다음 편에~ To be continue.
2012/04/12 - [Android Study] - Android Custom Widget 만들기 3편
남은 코드 이어서...
// Touch 이벤트 처리 함수
@Override
public boolean onTouchEvent(MotionEvent event) {
// touch 행동 (action) 얻기
// touch 행동 (action) 얻기
int action = event.getAction();
switch (action) {
// touch down 했을 때
case MotionEvent.ACTION_DOWN :
// mIsAnimation 은 boolean 객체 (animation 진행 상황 구분)
// mIsAnimation 은 boolean 객체 (animation 진행 상황 구분)
if (mIsAnimation) mHandler.sendEmptyMessage(ANIMATION_MESSAGE_STOP);
// int 형 X 좌표 저장 객체
// int 형 X 좌표 저장 객체
mOldPosition = (int) event.getX();
break;
// touch move 했을 때
// touch move 했을 때
case MotionEvent.ACTION_MOVE :
// animation 중이라면 아무것도 안함
// animation 중이라면 아무것도 안함
if (mIsAnimation) return super.onTouchEvent(event);
// animation 상태가 아니면 현재 좌표 읽어옴
// animation 상태가 아니면 현재 좌표 읽어옴
int current = (int) event.getX();
// 현재 좌표와 예전 좌표의 차이가 TOUCH_POINT_GAP 보다 클때만 반응
// TOUCH_POINT_GAP 값은 10
// 현재 좌표와 예전 좌표의 차이가 TOUCH_POINT_GAP 보다 클때만 반응
// TOUCH_POINT_GAP 값은 10
if (Math.abs(mOldPosition - current) > TOUCH_POINT_GAP) {
// int형 변수 움직일 거리 저장
// int형 변수 움직일 거리 저장
mMoveDelta = mOldPosition - current;
// 현재 좌표를 old 좌표에 복사
// 현재 좌표를 old 좌표에 복사
mOldPosition = current;
// onDraw() 호출
// onDraw() 호출
invalidate();
}
break;
// touch cancel 되거나 up 했을때
// touch cancel 되거나 up 했을때
case MotionEvent.ACTION_CANCEL :
case MotionEvent.ACTION_UP :
// animation이 동작 중이지 않다면 수행
// animation이 동작 중이지 않다면 수행
if (mIsAnimation == false) {
// button 그림이 on 상태가 됬을때
// button 그림이 on 상태가 됬을때
if (mSource.left == 0 && mMoveDelta < 0) {
mMoveDelta = 0;
// Listener 에다가 해당 event 전달
// Listener 에다가 해당 event 전달
onResult();
// button 그림이 off 상태가 됬을때
// button 그림이 off 상태가 됬을때
} else if (mSource.right == mBtnWidth && mMoveDelta > 0) {
mMoveDelta = 0;
// Listener 에다가 해당 event 전달
// Listener 에다가 해당 event 전달
onResult();
// 움직이던 도중 일때
// 움직이던 도중 일때
} else {
// animation 동작하게 handler 호출
// animation 동작하게 handler 호출
mHandler.sendEmptyMessage(ANIMATION_MESSAGE_START);
}
}
break;
}
// 나머지 다른 경우는 기존 code 유지
return super.onTouchEvent(event);
}
// 그림 그리는 함수
// 그림 그리는 함수
@Override
protected void onDraw(Canvas canvas) {
// animation 을 종료 해야 할지 구분 하는 변수
// animation 을 종료 해야 할지 구분 하는 변수
boolean animetionStop = false;
// left 위치 계산
// left 위치 계산
int left = mSource.left + mMoveDelta;
// right 위치 계산
// right 위치 계산
int right = mSource.right + mMoveDelta;
// right 값이 오른쪽 끝일 경우
if (right >= mBtnWidth) {
// 더이상 이동 하지 못하게 left 값 고정
// 더이상 이동 하지 못하게 left 값 고정
left = mBtnWidth - mMovementLimite;
// 더이상 이동 하지 못하게 right 값 고정
// 더이상 이동 하지 못하게 right 값 고정
right = mBtnWidth;
// off 상태로 변경
// off 상태로 변경
mIsOn = false;
// animation 동작 중이었으면 animation 종료
// animation 동작 중이었으면 animation 종료
if (mIsAnimation) animetionStop = true;
// left 값이 왼쪽 끝일 경우
// left 값이 왼쪽 끝일 경우
} else if (left <= 0) {
// 더이상 이동 하지 못하게 left 값 고정
// 더이상 이동 하지 못하게 left 값 고정
left = 0;
// 더이상 이동 하지 못하게 right 값 고정
// 더이상 이동 하지 못하게 right 값 고정
right = mMovementLimite;
// on 상태로 변경
// on 상태로 변경
mIsOn = true;
// animation 동작 중이었으면 animation 종료
// animation 동작 중이었으면 animation 종료
if (mIsAnimation) animetionStop = true;
}
// 이미지 rect의 left 값 설정
mSource.left = left;
// 이미지 rect의 right 값 설정
// 이미지 rect의 right 값 설정
mSource.right = right;
// canvas에 bitmap 그림
// canvas에 bitmap 그림
canvas.drawBitmap(mOnOffBitMap, mSource, mContent, new Paint());
super.onDraw(canvas);
// animation 종료 해야하면 handler 호출
// animation 종료 해야하면 handler 호출
if (animetionStop) mHandler.sendEmptyMessage(ANIMATION_MESSAGE_STOP);
} 남은 코드는 다음 편에~ To be continue.
'Android' 카테고리의 다른 글
Android Custom Widget 만들기 6편 (0) | 2012.04.12 |
---|---|
Android Custom Widget 만들기 5편 (0) | 2012.04.12 |
Android Custom Widget 만들기 3편 (0) | 2012.04.12 |
Android Custom Widget 만들기 2편 (0) | 2012.04.12 |
Android Custom Widget 만들기 1편 (1) | 2012.04.12 |