저는 현재 이미지가 바뀌면서 옆으로 이동하는 코드를 구성하고 있습니다.
이미지가 움직이는것 까진 되는데 문제는 이미지가 시작하는 위치를 바꾸려고 하는데
그게 잘 되지 않습니다;;;
1. setBounds()문제
아래는 저의 코드입니다.
package com.example.tower_defense;
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.util.AttributeSet;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
class ImageThread extends Thread{
SurfaceHolder mHolder;
int mImageWidth;
int mImageHeight;
int mCount = 0;
Drawable mFrontImage[] = new Drawable[4];
Bitmap mBackImage[] = new Bitmap[4];
int a,b=0;
public ImageThread(Context context, SurfaceHolder surfaceHolder){
mHolder = surfaceHolder;
Resources res = context.getResources();
mFrontImage[0] = res.getDrawable(R.drawable.testimage1);
mFrontImage[1] = res.getDrawable(R.drawable.testimage2);
mFrontImage[2] = res.getDrawable(R.drawable.testimage3);
mFrontImage[3] = res.getDrawable(R.drawable.testimage4);
mBackImage[0] = BitmapFactory.decodeResource(res,
R.drawable.gallery_selected_default);
mBackImage[1] = BitmapFactory.decodeResource(res,
R.drawable.gallery_selected_focused);
mBackImage[2] = BitmapFactory.decodeResource(res,
R.drawable.gallery_selected_pressed);
mBackImage[3] = BitmapFactory.decodeResource(res,
R.drawable.gallery_unselected_default);
mImageWidth = mFrontImage[1].getIntrinsicWidth();
mImageHeight = mFrontImage[1].getIntrinsicHeight();
}
public void run(){
while(true){
Canvas c = null;
try{
c = mHolder.lockCanvas(null);
synchronized(mHolder){
doDraw(c);
mCount++;
sleep(200);
}
}catch(Exception e){
Log.e("ThreadAnimationView", "Exception in thread",e);
}finally{
if(c != null){
mHolder.unlockCanvasAndPost(c);
}
}
}
}
private void doDraw(Canvas canvas){
if(canvas != null){
a += 80;
//b += 20;
//mFrontImage[mCount % 4].setBounds(50, 250, 70, 70);
mFrontImage[mCount % 4].setBounds(70, 320, 70 + mImageWidth, 320 + mImageHeight);
canvas.translate(a, 30);
mFrontImage[mCount % 4].draw(canvas);
}
}
}
public class ThreadAnimationView extends SurfaceView implements Callback{
private ImageThread thread;
public ThreadAnimationView(Context context, AttributeSet attrs){
super(context, attrs);
init(context);
}
private void init(Context context){
SurfaceHolder holder = getHolder();
holder.addCallback(this);
thread = new ImageThread(context, holder);
}
public void surfaceCreated(SurfaceHolder holder){
thread.start();
}
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { }
public void surfaceDestroyed(SurfaceHolder holder) {
try {
thread.join();
//thread.join()은 스레드가 종료될 때 까지
//호출스레드를 차단한다.
} catch (InterruptedException ex) {}
}
}
mFrontImage[mCount % 4].setBounds(70, 320, 70 + mImageWidth, 320 +mImageHeight);
이부분이 setBounds부분인데, 제가 그림을 시작하는 위치를 바꾸고 싶어서
setBounds()의 인자값을 보면 처음 2개의 인자값은 그림의 위치, 나머지 두개의 인자값은 이미지의 크기로
알고 있습니다. 그런데 처음 인자값 2개를 바꾸면 이미지가 이동하진않고 이미지의 크기가 변해버립니다.
이미지의 크기가 바뀌면서 이미지의 좌표도 이상한곳으로 이동해버립니다.
어떻게 하면 이미지가 시작되는 위치를 바꿀수가 있나요??