package exam.test;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class gameview extends SurfaceView implements android.view.SurfaceHolder.Callback{
 
 Context _context;
 private GameThread thread;
 private boolean mRun = true;
 private SurfaceHolder mSurfaceHolder;
 
 private BitmapDrawable Image = null;
 private Bitmap img_ch= null;
 private Paint pnt = new Paint();
 private Rect rt1,rt2;
 
 private int ch_x = 400;
 
 public gameview(Context context){
  super(context);  
  _context = context;
  mSurfaceHolder = getHolder();
  mSurfaceHolder.addCallback(this);
  thread = new GameThread(mSurfaceHolder);
 } 
 
 class GameThread extends  Thread{
  
  public GameThread(SurfaceHolder surfaceHolder)
  {
   img_ch = InitCharacterImage(_context, 0);
   
  }
  
  public void doDraw(Canvas canvas)
  {

   canvas.drawBitmap(img_ch, ch_x, 240, pnt);
   
   pnt.setAntiAlias(true);
   rt1 = new Rect(50,400,100,450);
   rt2 = new Rect(150,400,200,450);
   
   pnt.setStyle(Paint.Style.FILL);
   pnt.setColor(Color.argb(255, 0, 0, 255));
   canvas.drawRect(rt1, pnt);
   canvas.drawRect(rt2, pnt);
  
  }
  
  public void run()
  {
   while(mRun)
   {
    Canvas canvas = null;
    
    try
    {
     canvas = mSurfaceHolder.lockCanvas(null);
     synchronized(mSurfaceHolder)
     {      
      doDraw(canvas);      
      sleep(100);
     }
    }
    
    catch(InterruptedException e)
    {
     e.printStackTrace();
    }
    
    finally
    {
     if(canvas != null)
     {
      mSurfaceHolder.unlockCanvasAndPost(canvas);
     }
    }
    
   }
  }
  
  public boolean setRun(boolean run)
  {
   mRun = run;
   return mRun;
  }
  
 }
 
 @Override
 public boolean onTouchEvent(MotionEvent event)
 {
  if(event.getAction() == MotionEvent.ACTION_DOWN)
  {
   int x = (int)event.getX();
   int y = (int)event.getY();
   
   if(x>rt1.left && x<rt1.right)
   {
    if(y>rt1.top && y< rt1.bottom)
    {
     ch_x -= 5; 
    }
   }
   
   else if(x>rt2.left && x<rt2.right)
   {
    if(y>rt2.top && y< rt2.bottom)
    {
     ch_x += 5;
     
    }
   }   
   invalidate();
   return true;
  }
  
  
  return false;
  
 }
 
 public Bitmap InitCharacterImage(Context context, int num)
 {
  // 캐릭터 이미지get
  Image = (BitmapDrawable)context.getResources().getDrawable(R.drawable.ch_action_1 + num);
  return Image.getBitmap();
 }
 
 
 
 
 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
  // TODO Auto-generated method stub
  
 }

 public void surfaceCreated(SurfaceHolder holder) {
  // TODO Auto-generated method stub
  if(thread.getState() == Thread.State.TERMINATED){
   thread = new GameThread(holder);
   thread.start();
  }else{
   thread.start();
  }
  thread.setRun(true);
 }

 public void surfaceDestroyed(SurfaceHolder holder) {
  // TODO Auto-generated method stub
  
  try{
   thread.join();
  }catch(InterruptedException e){
   e.printStackTrace();
  }
  
  mRun = false;
 }
 

}

 

doDraw에서 그려주는 사각형 두개중 왼쪽꺼 누르면 이미지가 왼쪽으로 가도록, 오른쪽꺼 누르면 오른쪽으로 가도록 하는 코드인데..

 

일단 이미지가 움직이기는 합니다...그런데 기존 위치의 이미지는 사라지지않고 계속 이미지가 생성이 되네요 =-=;;

 

어떻게 해야 처음 생긴 이미지만 이동하도록 할수있을까요??

 

---------------------------------------------

 

그리고 지금 이걸 가로로 제작중인데..

 

AndroidMainfest에 분명 옵션을 줬는데 에뮬레이터가 계속 세로로 실행되네요 =_=;;

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="exam.test"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />

    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".TestActivity"
                  android:label="@string/app_name" android:configChanges="orientation" android:screenOrientation="landscape">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

 

혹시 몰라 액티비티도 올립니다.

 

package exam.test;

import android.app.*;
import android.os.*;
import android.view.*;
import android.widget.*;

public class TestActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
       
        gameview gv = new gameview(this);
        gv.setLayoutParams(new LinearLayout.LayoutParams(
          ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT,0.0f));
       
        setContentView(gv);
    }
}

 

이제 공부한지 일주일도 안된 초짜라 힘드네요 ^_^;;

답변 부탁드립니다~