이전글.. 필요한분 여기.
2012/04/12 - [Android Study] - Android Custom Widget 만들기 3편


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

+ Recent posts