애니메이션을 액티비티에서 이미지가 깨진다고 생각이되어

고수님들께서 알려주신 sufface를 이용하라그래서

밑에소스와 같이 canvas를 이용해 해보았는데 그래도 이미지가 움직이며 깨지네요..

다른방법이나 .. 아니면 쓰레드에서 애니메이션 사용도 가능한지 알려주시면 정말

이쁜여자친구 생기실거에요 ...ㅜㅜ

 

public class MyGraphics2D02 extends Activity {   // 액티비티를 상속받음
 @Override
    public void onCreate(Bundle savedInstanceState) {    
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE); 
        setContentView(new CustomView(this));     // 화면에 뿌려줄것을 나타냄
    }
 
    class CustomView extends SurfaceView implements SurfaceHolder.Callback {// 위에서 얘기한 뿌려줄 함수인데 상속을 받았다
      int jj=1;
      boolean is = false;
     private CustomViewThread CVThread;  // 쓰레드 객체 (밑에서 메소드 정의함)
 
        public CustomView(Context context) {
            super(context);//위를 쓸수 잇는권한
            getHolder().addCallback(this);       // 홀더와 쓰레드와 연결햇음??
            CVThread = new CustomViewThread(getHolder(), this); //
           
        }
 
        @Override
        public void onDraw(Canvas canvas) {    // 그림을 그려주는 메소드
         Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.icon);  // 아이콘 이미지를 비트맵이지지로 만든다
           
 
         if(jj<=5 && is==true){
          if(jj==5){ is = false; }
           jj+=1;}
         else if(jj>=0&& is==false){
         
        if(jj==0){ is = true; }
         jj-=1;
         }
        
        
                 canvas.drawColor(Color.parseColor("BLACK")); 
                 canvas.rotate(jj);           
                 canvas.drawBitmap(bm, 50, 50, null);
                 canvas.restore();

            try { Thread.sleep(50); } catch (Exception e){}

          
         }
 
        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
            // TODO Auto-generated method stub
 
        }
 
        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            CVThread.setRunning(true);
            CVThread.start();
        }
 
        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
           
            boolean retry = true;
            CVThread.setRunning(false);
            while (retry) {  //ture인상태일때
                try {
                    CVThread.join();// 쓰레드를 먼저 끝내고 메인을끝내고 싶을때
                    retry = false;
                } catch (InterruptedException e) {
                   
                }
            }
        }
    }
 
    class CustomViewThread extends Thread {
        private SurfaceHolder surfaceholder;
        private CustomView customview;
        private boolean running = false;
 
        public CustomViewThread(SurfaceHolder surfaceHolder, CustomView CustomView) {
            surfaceholder = surfaceHolder;
            customview = CustomView;
        }
 
        public void setRunning(boolean run) {// 트루값을 입력받고 러닝에 트루값입력후 start호출하여 run했음
            running = run;
        }
 
        @Override
        public void run() {
            Canvas c;
            while (running) {
                c = null;
                try {
                    c = surfaceholder.lockCanvas(null);
                    synchronized (surfaceholder) {
                        customview.onDraw(c);
                    }
                } finally {
                   
                    if (c != null) {
                        surfaceholder.unlockCanvasAndPost(c);
                    }
                }
            }
        }
    }
}

오늘은 4/1 일입니다