이미지 이동시키는 프로그램을 만드는 중인데요~
쓰레드를 이용해요.
아래는 제가 구현한 코드입니다.
에러도 없고 애뮬레이터도 돌아가는데 이동안하고 이미지가 그대로 있네요 ㅠㅠ
package com.swu.android;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.SurfaceHolder.Callback;
import android.widget.FrameLayout;
import android.widget.Toast;
public class AnimateView1 extends SurfaceView implements Callback {
//**********************************tnwjd
private int x=10;
private int y=10;
ImageThread thread;
public AnimateView1(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
SurfaceHolder holder=getHolder();
holder.addCallback(this);
thread=new ImageThread(holder, context);
}
class ImageThread extends Thread{
private int mWidth;
private int mHeight;
private int mImgWidth;
private int mImgHeight;
private Boolean mDirectionX=true;
private Boolean mDirectionY=true;
private SurfaceHolder mSurfaceHolder;
private Drawable mSwu[]=new Drawable[1];
public ImageThread(SurfaceHolder surfaceHolder, Context context){
mSurfaceHolder = surfaceHolder;
mSwu[0]=context.getResources().getDrawable(R.drawable.swu4);
mImgWidth=mSwu[0].getIntrinsicWidth();
mImgHeight=mSwu[0].getIntrinsicHeight();
}
@Override
public void run() {
// TODO Auto-generated method stub
mWidth=getWidth();
mHeight=getHeight();
super.run();
while(true){
Canvas c=null;
try{
c=mSurfaceHolder.lockCanvas(null);
synchronized (mSurfaceHolder) {
doDraw(c);
sleep(10);
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(c!=null){
mSurfaceHolder.unlockCanvasAndPost(c);
}
}
}
}
private void doDraw(Canvas canvas){
canvas.drawColor(Color.BLACK);
if(x>=0 && x+mImgWidth<=mWidth && y>=0 && y+mImgHeight<=mHeight){
if(x+mImgWidth==mWidth)
mDirectionX=false;
if(x==0)
mDirectionX=false;
if(y==0)
mDirectionY=false;
if(y+mImgHeight==mHeight)
mDirectionY=false;
if(mDirectionX=true||mDirectionY==true)
{mSwu[0].setBounds(x,y,x+mImgWidth,y+mImgHeight);
mSwu[0].draw(canvas);}
}
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if((event.getAction()==KeyEvent.ACTION_DOWN)&&
(keyCode==KeyEvent.KEYCODE_DPAD_RIGHT)){
x+=5;
//return true;
}else if((event.getAction()==KeyEvent.ACTION_DOWN)&&
(keyCode==KeyEvent.KEYCODE_DPAD_LEFT)){
x-=5;
// return true;
}else if((event.getAction()==KeyEvent.ACTION_DOWN)&&
(keyCode==KeyEvent.KEYCODE_DPAD_UP)){
y-=5;
//return true;
}else if((event.getAction()==KeyEvent.ACTION_DOWN)&&
(keyCode==KeyEvent.KEYCODE_DPAD_DOWN)){
y+=5;
//return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
thread.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
}
무엇이 잘못되었을까여