package com.android.imagedisplay;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.SurfaceHolder.Callback;
import android.widget.TextView;

public class AnimateView extends SurfaceView implements Callback {
 
 class ImageThread extends Thread {
  private Bitmap mImgBack0;
  private Bitmap mImgBack1;
  private Bitmap mImgBack21;
  private Bitmap mImgback31;
  private int mPlayerWidth;
  private int mPlayerHeight;
  private int mVisitCount = 0;
  private SurfaceHolder mSurfaceHolder;
  private Drawable mFrontImage[] = new Drawable[4];
     private int mDirection = 0;
     private Drawable mArrow[] = new Drawable[2];
     private int mArrowWidth, mArrowHeight;
    
  public ImageThread(SurfaceHolder surfaceHolder, Context context, Handler handler) {
   // TODO Auto-generated method stub
   mSurfaceHolder = surfaceHolder;
   Resources res = context.getResources();
   
         mFrontImage[0] = context.getResources().getDrawable(R.drawable.front01);
         mFrontImage[1] = context.getResources().getDrawable(R.drawable.front02);
         mFrontImage[2] = context.getResources().getDrawable(R.drawable.front03);
         mFrontImage[3] = context.getResources().getDrawable(R.drawable.front04);
        
         mImgBack0 = BitmapFactory.decodeResource(res, R.drawable.img0);
         mImgBack1 = BitmapFactory.decodeResource(res, R.drawable.img1);
         mImgBack21 = BitmapFactory.decodeResource(res, R.drawable.img21);
         mImgback31 = BitmapFactory.decodeResource(res, R.drawable.img31);
        
         mPlayerWidth = mFrontImage[1].getIntrinsicWidth();
         mPlayerHeight = mFrontImage[1].getIntrinsicHeight();
        
         mArrow[0] = context.getResources().getDrawable(R.drawable.arrowleft);
         mArrow[0] = context.getResources().getDrawable(R.drawable.arrowright);
         mArrowWidth = mArrow[0].getIntrinsicWidth();
         mArrowHeight = mArrow[1].getIntrinsicHeight();
  }
  

  public void doStart(){
       synchronized (mSurfaceHolder){
       }
     }
     
     public void run(){
      while(true){
       Canvas c = null;
       try{
        c = mSurfaceHolder.lockCanvas(null);
        synchronized (mSurfaceHolder){
         doDraw(c);
         mVisitCount++;
         sleep(100);
        }
       }catch(InterruptedException e){
        e.printStackTrace();
       } finally{
        
        if(c!=null){
         mSurfaceHolder.unlockCanvasAndPost(c);
        }
       }
      }
     }
     private void doDraw(Canvas canvas){
     canvas.drawBitmap(mImgBack0, 0, 0, null);
     canvas.drawBitmap(mImgBack1, 0, 90, null);
     canvas.drawBitmap(mImgBack21, 0, 190, null);
     canvas.drawBitmap(mImgback31, 0, 310, null);
    
     mFrontImage[mVisitCount%4].setBounds(145, 360, 145+mPlayerWidth, 360+mPlayerHeight);
     mFrontImage[mVisitCount%4].draw(canvas);
    
     if (mDirection == -1) {
      mArrow[0].setBounds(20, 200, 20+mArrowWidth, 200+mArrowHeight);
      mArrow[0].draw(canvas);
     }
     else if (mDirection == 1) {
      mArrow[1].setBounds(190, 200, 190+mArrowWidth, 200+mArrowHeight);
      mArrow[1].draw(canvas);
     }
    }   
          void setKeyDown(int keyCode) {
           mDirection = keyCode;
          }
 }
 
 private TextView mStatusText;
 private ImageThread thread;
   
 public AnimateView(Context context, AttributeSet attrs){
 
  super(context, attrs);
  
  SurfaceHolder holder = getHolder();
  
  holder.addCallback(this);
    
  
  thread = new ImageThread(holder, context, new Handler() {
   
   public void handleMessage(Message m){
   
    mStatusText.setVisibility(m.getData().getInt("viz"));
   
    mStatusText.setText(m.getData().getString("text"));
   
   }
  });
    
  
    
  setFocusable(true);
   
 }
   

 

 @Override
 public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
  // TODO Auto-generated method stub

 }

 @Override
 public void surfaceCreated(SurfaceHolder arg0) {
  // TODO Auto-generated method stub

 }

 @Override
 public void surfaceDestroyed(SurfaceHolder arg0) {
  // TODO Auto-generated method stub
     boolean retry = true;
     while (retry) {
      try {
       thread.join();
       retry = false;
      }catch (InterruptedException e) {
      }
     }
 }

 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
  // TODO Auto-generated method stub
      if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT)
         thread.setKeyDown(-1);
     else if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT)
         thread.setKeyDown(1);
      else if (keyCode == KeyEvent.KEYCODE_DPAD_UP)
         thread.setKeyDown(0);
        
      return super.onKeyDown(keyCode, event);
       }
 }


공지사항 모두 읽었습니다.