3일째, 안되고 있습니다.
Surface view 로 촬영한 사진을 가져와서 불러오고, 이미지를 불러와 터치 무브 이벤트로 이동시키는 거 까지는
괜찮게 되는데요;
이 이미지 크기랑 회전을 시키려고, 버튼을 만들었는데... 되지가 않네요.. ㅠㅠ
하고 싶은게, 버튼을 눌렀을때 이미지 크기 및 회전 조절 입니다.;
어떻게 안될까요...
소스 첨부 합니다^^ 알려 주시면 맛있는 식사 쏩니다!!^^
ps_ 추가 하고 싶은 부분은... 이런식으로 온클릭 했을때 이미지 크기를 일단 바꿔 주고 싶은데. 어디다가 넣어도 안되요 ㅠㅠ
==================================================================================================
final Button btin = (Button)findViewById(R.id.btin);
btin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
thread.xzoom+=5;
}
});
==================================================================================================
전체 소스 입니다!!
public class GameView extends SurfaceView implements Callback {
class ImgThread extends Thread {
private SurfaceHolder mSurfaceHolder;
private Bitmap mImgBack;
private Bitmap Rimg0;
private int xpos;
private int ypos;
private int xzoom;
private int yzoom;
public ImgThread(SurfaceHolder surfaceHolder, Context context) {
mSurfaceHolder = surfaceHolder;
Resources res = context.getResources();
Rimg0 = BitmapFactory.decodeResource(res, R.drawable.ring);
mImgBack = BitmapFactory.decodeFile("/sdcard/picturefile.png");
}
public void run() {
while (true) {
Canvas canvas = null;
try {
canvas = mSurfaceHolder.lockCanvas(null);
synchronized (mSurfaceHolder) {
canvas.drawBitmap(mImgBack, 0, 0, null);
Bitmap sm = Bitmap.createScaledBitmap(Rimg0, 100 + xzoom, 100 + yzoom, false);
canvas.drawBitmap(sm, 50 + xpos, 50 + ypos, null);
sleep(100);
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if (canvas!=null) {
mSurfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
}
}
private ImgThread thread;
public GameView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
SurfaceHolder holder = getHolder();
holder.addCallback(this);
thread = new ImgThread(holder,context);
setFocusable(true);
}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
thread.start();
}
@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) {
}
}
}
private float mLastTouchX;
private float mLastTouchY;
@Override
public boolean onTouchEvent(MotionEvent ev) {
// TODO Auto-generated method stub
final int action = ev.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN: {
final float x = ev.getX();
final float y = ev.getY();
mLastTouchX = x;//save log
mLastTouchY = y;//save log
//thread.xzoom += -5;
//thread.yzoom += -5;
break;
}
case MotionEvent.ACTION_MOVE: {
final float x = ev.getX();
final float y = ev.getY();
final float dx = x - mLastTouchX;
final float dy = y - mLastTouchY;
thread.xpos+=dx;
thread.ypos+=dy;
mLastTouchX = x;
mLastTouchY = y;
invalidate();
break;
}
}
return true;
}
}
setContentView(GameView); 이렇게 하면 버튼을 넣을 장소가 없으니 버튼을 SurfaceHolder.Callback를 구현해서 자바코드에서 따로 추가 시키고,
setContentView(main.xml); 이런식이면 main에 addView(GameView) 해야할거 같은데요.