文章出處
文章列表
經過了前兩天的設置后,我們就可以再View類中,進行游戲的布置,和進行操作了。
package com.mars.demo; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Paint.FontMetrics; import android.util.Log; import android.view.MotionEvent; import android.view.View; public class MyView extends View { //定義單元格的寬和高 public float width; public float height; private int selectX; private int selectY; public Game game = new Game(); public MyView(Context context) { super(context); // TODO Auto-generated constructor stub } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { // TODO Auto-generated method stub this.width = w/9f; this.height = h/9f; super.onSizeChanged(w, h, oldw, oldh); } @Override protected void onDraw(Canvas canvas) { //定義畫筆對象-->繪制背景 Paint paint = new Paint(); //設置畫筆的顏色 paint.setColor(getResources().getColor(R.color.shudu_background)); //繪制手機屏幕背景色 canvas.drawRect(0, 0, getWidth(), getHeight(), paint); //定義畫筆對象-->繪制格子線條 Paint darkPaint = new Paint(); darkPaint.setColor(getResources().getColor(R.color.shudu_dark)); Paint hilitePaint = new Paint(); hilitePaint.setColor(getResources().getColor(R.color.shudu_hilite)); Paint lightPaint = new Paint(); lightPaint.setColor(getResources().getColor(R.color.shudu_light)); //繪制九宮格 for(int i = 0; i<9; i++) { //繪制橫線 canvas.drawLine(0, i*height, getWidth(), i*height, lightPaint); canvas.drawLine(0, i*height+1, getWidth(), i*height+1, hilitePaint); //繪制縱線 canvas.drawLine(i*width, 0, i*width, getHeight(), lightPaint); canvas.drawLine(i*width+1, 0, i*width+1, getHeight(), hilitePaint); } //這個for循環是繪制四根醒目的線 for(int i = 0; i<9; i++) { if(i % 3 != 0) { continue; } //繪制橫線 canvas.drawLine(0, i*height, getWidth(), i*height, darkPaint); canvas.drawLine(0, i*height+1, getWidth(), i*height+1, hilitePaint); //繪制縱線 canvas.drawLine(i*width, 0, i*width, getHeight(), darkPaint); canvas.drawLine(i*width+1, 0, i*width+1, getHeight(), hilitePaint); } //繪制數字 Paint numberPaint = new Paint(); //設置文字的一系列屬性 numberPaint.setColor(Color.BLACK); numberPaint.setStyle(Paint.Style.STROKE); numberPaint.setTextSize(height*0.75f); numberPaint.setTextAlign(Paint.Align.CENTER); FontMetrics fontMetrics = numberPaint.getFontMetrics(); float x = width/2; float y = height/2 - (fontMetrics.ascent+fontMetrics.descent)/2; for(int i=0; i<9; i++) for(int j=0; j<9; j++) { canvas.drawText(game.getTitleString(i, j), i*width + x, j*height+y, numberPaint); } super.onDraw(canvas); } @Override public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub if(event.getAction() != MotionEvent.ACTION_DOWN) { return super.onTouchEvent(event); } selectX = (int)(event.getX()/width); selectY = (int)(event.getY()/height); int[] used = game.getUsedTile(selectX, selectY); StringBuffer sb = new StringBuffer(); for(int i = 0; i<used.length; i++) { sb.append(used[i]); } Log.i("TAG", sb.toString()); KeyDialog keyDialog = new KeyDialog(this.getContext(), used, this); keyDialog.show(); /*//定義一個layoutInflate對象,轉載view文件 LayoutInflater layoutInflater = LayoutInflater.from(this.getContext()); View view = layoutInflater.inflate(R.layout.dialog, null); TextView textView = (TextView) view.findViewById(R.id.usedTextId); textView.setText(sb.toString()); //創建對話框,彈出view AlertDialog.Builder builder = new AlertDialog.Builder(this.getContext()); builder.setView(view); AlertDialog dialog = builder.create(); dialog.show();*/ return true; } //View類接受KeyDialog傳遞過來的數據,調用業務邏輯Game類,進行處理 public void setSelectTile(int tile) { Log.i("TAG", game.setTileIfValid(selectX, selectY, tile)+""+tile); if(game.setTileIfValid(selectX,selectY,tile)) { invalidate();//重新繪制View對象 } } }
在主類中調用MyView對象。
package com.mars.demo; import android.os.Bundle; import android.app.Activity; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.activity_main); setContentView(new MyView(this)); } }
通過上面數獨游戲的學習,我了解了Paint類,Canvas類。我學習了一些繪制圖形的基本知識,進一步鞏固了一些android的基本知識。從中,我發現,作為一個程序員,一定要不斷的去敲代碼,勇于去實踐,程序時敲出來的。很多時候,我們看別人寫程序,感覺邏輯都很清晰,思路也不紊亂,但是,真正當自己去實踐的時候,你會發現,其實并不是那么容易。當你出現問題的時候,你得嘗試去調試,這樣,我們才能不斷成長。
程序員都是在調試Bug,調試錯誤中成長起來的。這是我非常贊同的一句話。在此,給自己一句勉勵的話,希望自己在今后的學習日子中,不怕困難,用于去嘗試。
文章列表
全站熱搜