上一篇直接创建MapView,不方便进行代码扩展,进行一个简单的重构,方便添加角色进去。
重构后MapView=》GameView
第一,MainActivity.java如下:
package com.thundersoft.test.sdb410c; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.Window; import com.thundersoft.test.sdb410c.com.thundersoft.test.sdb410c.view.GameView; public class MainActivity extends Activity { private GameView mGameView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mGameView = new GameView(this); getWindow().requestFeature(Window.FEATURE_NO_TITLE); setContentView(mGameView); } @Override protected void onResume() { super.onResume(); Log.e("SDB410c","onResume"); } @Override protected void onPause() { super.onPause(); Log.e("SDB410c","onPause"); } }
第二,原来的MapView更名为GameView,并加入飞机绘制,实现略有变动,如下:
package com.thundersoft.test.sdb410c.com.thundersoft.test.sdb410c.view; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffXfermode; import android.graphics.Xfermode; import android.view.Choreographer; import android.view.View; import com.thundersoft.test.sdb410c.Debug; /** * Created by xujikui on 2018/1/23. */ public class GameView extends View { private int mCol = 35; private int mRow = 35; private float mRowStep; private float mColStep; private Paint mPaint; private Plane mPlane; public GameView(Context context) { super(context); mPaint = new Paint(); mPaint.setColor(Color.LTGRAY); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeWidth(1.5f); mPlane = new Plane(mCol, mRow); } @Override protected void onFinishInflate() { super.onFinishInflate(); } @Override protected void onDraw(Canvas canvas) { mRowStep = getHeight() / mRow; mColStep = getWidth() / mCol; drawMap(canvas); drawPlane(canvas); } private void drawPlane(Canvas canvas){ mPlane.onDraw(mRowStep,mColStep,canvas); } private void drawMap(Canvas canvas){ canvas.drawColor(Color.WHITE); // float startX, startY, stopX, stopY; float left,right,bottom,top; for(int i=0; i<mRow; i++){ for(int j=0;j<mCol;j++){ left = j*mColStep; right = left + mColStep; top = i*mRowStep; bottom = top + mRowStep; canvas.drawRect(left,top,right,bottom,mPaint); } } } Choreographer.FrameCallback mCallback = new Choreographer.FrameCallback() { @Override public void doFrame(long l) { Debug.print("doFrame"); invalidate(); } }; private void requestNextFrame(){ Choreographer.getInstance().postFrameCallback(mCallback); } }
第三,飞机类:
package com.thundersoft.test.sdb410c.com.thundersoft.test.sdb410c.view; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; /** * Created by xujikui on 2018/1/25. */ public class Plane { private int[] mPosition = new int[2]; private int mCol; private int mRow; private int unit = 1; private Paint mPaint; public Plane(int col, int row){ mPaint = new Paint(); mPaint.setColor(Color.RED); mCol = col; mRow = row; setPosition(mRow-2,mCol/2); } public void setPosition(int row, int col){ mPosition[0] = col; mPosition[1] = row; } public void onDraw(float rowStep, float colStep, Canvas canvas){ float startX = mPosition[0] * colStep; float startY = mPosition[1] * rowStep; canvas.drawRect(startX + unit*colStep,startY, startX+2*unit*colStep, startY + rowStep*unit, mPaint); canvas.drawRect(startX, startY+unit*rowStep, startX + 3*unit*colStep, startY + rowStep*2*unit, mPaint); } }
第四,运行截图: