官术网_书友最值得收藏!

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 執行效果

主站蜘蛛池模板: 阳城县| 科尔| 甘泉县| 交城县| 博乐市| 修文县| 岳阳市| 托里县| 大同县| 韶山市| 开原市| 定陶县| 甘德县| 通化县| 达尔| 凉城县| 许昌市| 吉首市| 徐汇区| 泉州市| 成武县| 合山市| 藁城市| 德惠市| 嫩江县| 乌兰察布市| 陆良县| 灌阳县| 泸定县| 苍山县| 吉林省| 陕西省| 大余县| 牙克石市| 佛坪县| 泸西县| 水富县| 三明市| 嘉善县| 亳州市| 雷山县|