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);
}
}
이제 공부한지 일주일도 안된 초짜라 힘드네요 ^_^;;
답변 부탁드립니다~
에뮬레이터에서 Ctrl + F11 또는 Ctrl + F12 해보세요.