- Android游戲開發技術實戰詳解
- 褚尚軍 張加春編著
- 900字
- 2018-12-30 05:33:21
4.3 Paint類繪制圖像
Paint類的完整寫法是Android.Graphics. Paint,它的厲害之處是可以設置畫筆和畫刷的屬性。在Paint類中最著名的是下面的幾個方法。
· void reset():實現重置功能;
· void setARGB(int a, int r, int g, int b)或void setColor(int color):均設置Paint對象的顏色;
· void setAntiAlias(boolean aa):是否抗鋸齒,需要配合void setFlags (Paint.ANTI_ ALIAS_FLAG) 來幫助消除鋸齒使其邊緣更平滑;
· Shader setShader(Shader shader):設置陰影,Shader類是一個矩陣對象,如果為NULL將清除陰影;
· void setStyle(Paint.Style style):設置樣式,一般為Fill填充,或者STROKE凹陷效果;
· void setTextSize(float textSize):設置字體大小;
· void setTextAlign(Paint.Align align):文本對齊方式;
· Typeface setTypeface(Typeface typeface):用于設置字體,通過Typeface可以加載Android內部的字體,對于中文來說一般為宋體,我們可以根據需要來自己添加部分字體,如雅黑等。
· void setUnderlineText(boolean underlineText):表示是否設置下畫線。
實例4-2 使用Color類和Paint類實現繪圖處理(daima\4\PaintCH)。
本實例是通過類Paint和Color聯合完成的,但是Paint在此例中發揮的作用更大。本實例的具體實現流程如下所示。
step 1 編寫布局文件main.xml,具體代碼如下所示。
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:orientation="vertical" Android:layout_width="fill_parent" Android:layout_height="fill_parent" > <TextView Android:layout_width="fill_parent" Android:layout_height="wrap_content" Android:text="@string/hello" /> </LinearLayout>
step 2 編寫文件Activity.java,通過“mGameView = new GameView(this)”,用Activity類的setContentView方法來設置要顯示的具體View類。文件Activity.java的主要代碼如下所示。
public class Activity01 extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mGameView = new GameView(this); setContentView(mGameView); } }
step 3 編寫文件PaintCH.java來繪制一個指定的圖形,主要實現代碼如下所示。
/* 聲明Paint對象 */ private Paint mPaint = null; public draw(Context context) { super(context); /* 構建對象 */ mPaint = new Paint(); /* 開啟線程 */ new Thread(this).start(); } public void onDraw(Canvas canvas) { super.onDraw(canvas); /* 設置Paint為無鋸齒 */ mPaint.setAntiAlias(true); /* 設置Paint的顏色 */ mPaint.setColor(Color.WHITE); mPaint.setColor(Color.BLUE); mPaint.setColor(Color.YELLOW); mPaint.setColor(Color.GREEN); /* 同樣是設置顏色 */ mPaint.setColor(Color.rgb(255, 0, 0)); /* 提取顏色 */ Color.red(0xcccccc); Color.green(0xcccccc); /* 設置Paint的顏色和Alpha值(a,r,g,b) */ mPaint.setARGB(255, 255, 0, 0); /* 設置Paint的Alpha值 */ mPaint.setAlpha(220); /* 這里可以設置為另外一個Paint對象 */ // mPaint.set(new Paint()); /* 設置字體的尺寸 */ mPaint.setTextSize(14); // 設置Paint的風格為“空心” // 當然也可以設置為“實心”(Paint.Style.FILL) mPaint.setStyle(Paint.Style.STROKE); // 設置“空心”的外框的寬度。 mPaint.setStrokeWidth(5); /* 得到Paint的一些屬性 */ Log.i(TAG, "paint的顏色:" + mPaint.getColor()); Log.i(TAG, "paint的Alpha:" + mPaint.getAlpha()); Log.i(TAG, "paint的外框的寬度:" + mPaint.getStrokeWidth()); Log.i(TAG, "paint的字體尺寸:" + mPaint.getTextSize()); /* 繪制一個矩形 */ // 肯定是一個空心的矩形 canvas.drawRect((320 - 80) / 2, 20, (320 - 80) / 2 + 80, 20 + 40, mPaint); /* 設置風格為實心 */ mPaint.setStyle(Paint.Style.FILL); mPaint.setColor(Color.GREEN); /* 繪制綠色實心矩形 */ canvas.drawRect(0, 20, 40, 20 + 40, mPaint); } //觸筆事件 public boolean onTouchEvent(MotionEvent event) { return true; } //按鍵按下事件 public boolean onKeyDown(int keyCode, KeyEvent event) { return true; } //按鍵彈起事件 public boolean onKeyUp(int keyCode, KeyEvent event) { return false; } public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) { return true; } public void run() { while (!Thread.currentThread().isInterrupted()) { try { Thread.sleep(100); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } // 使用postInvalidate可以直接在線程中更新界面 postInvalidate(); } } }
執行后的效果如圖4-2所示。

圖4-2 執行效果