package com.Project2;

import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Display;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       
        // 전체 화면 모드
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
        // 사용자 View 모드
        setContentView(new MyView(this));
    }
   
    //----------------------------------
    //  MyView    
    //----------------------------------
    class MyView extends View {
     int width, height;  // View의 폭과 높이
        int x, y;         // 캐릭터의 현재 좌표
        int sx, sy;         // 캐릭터가 이동할 방향과 거리
     int rw, rh;             // 캐릭터의 중심점
     Bitmap rabbit;
     
     
        //----------------------------------
        //  생성자(Constructor)    
        //----------------------------------
  public MyView(Context context) {
   super(context);
   Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
   width = display.getWidth();  // View의 가로 폭
   height = display.getHeight();   // View의 세로 높이
   
   rabbit = BitmapFactory.decodeResource(context.getResources(), R.drawable.rabbit_1);
   rw = rabbit.getWidth() / 2;  // 캐릭터의 중심점
   rh = rabbit.getHeight() / 2;
   
   x = 100; // 캐릭터의 초기 좌표
   y = 100;
   sx = 3;  // 캐릭터가 1회에 이동할 거리
   sy = 3;
   
      mHandler.sendEmptyMessageDelayed(0, 10);  // Handler 호출
  }
  
        //----------------------------------
        //  onDraw    
        //----------------------------------
  public void onDraw(Canvas canvas) {
   x += sx;    // 수평으로 이동
   y += sy;    // 수직으로 이동

   Log.i("sx",sx+"");
   Log.i("sy",sy+"");
   
/*          벽을 통과할 경우의 처리   
   if (x < -rw)    x = width + rw;
   if (x > width + rw)  x = - rw;
   if (y < -rh)    y = height + rh;
   if (y > height + rh) y = - rh;
*/   
   // 벽과 반사할 경우의 처리
   if (x < rw) {    // 왼쪽 벽과 충동
    x = rw;
    sx =  -sx;
   }
   if (x > width - rw) { // 오른쪽 벽과 충돌
    x = width - rw;
    sx =  -sx;
   }
   if (y < rh) {    // 천정과 충돌
    y = rh;
    sy =  -sy;
   }
   if (y > height - rh) {  // 바닥과 충돌
    y = height - rh;
    sy =  -sy;
   }
   canvas.drawBitmap(rabbit, x - rw, y - rh, null);
  }
  
   //------------------------------------
        //      Timer Handler
        //------------------------------------
        Handler mHandler = new Handler() {         
         public void handleMessage(Message msg) {
          invalidate();  // View를 다시 그림                      
          mHandler.sendEmptyMessageDelayed(0, 100);
         }
        }; // Handler
    } // MyView
} // Activiry

 

 

소스는 이렇게 진행되고 있습니다.

여기서 로그를 찍어보고 테스트 해봤는데 왼쪽에서 오른쪽으로 이동시 sx값이 3씩 증가합니다.  오른쪽 벽 충돌했을때 값을 다시 셋팅해서 -3으로 x값이 감소됩니다. 그리고 오른쪽 충돌했을때 다시 3씩 증가를 하는데.. 소스를 보면 초기 셋팅값이 sx =3이고,  오른쪽 벽 충돌시 sx = -sx라서 -3인것 알겠습니다. 여기서 중요한것이 if문에서만 -3으로 되야되는데 계속 -3으로 값이 나오더라고요..

이런이유를 아무리 생각해봐도 답이 안나와서요 ㅠㅠ 답변 부탁드립니다.