Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android_2D繪圖的學習Paint,Canvas(一)

Android_2D繪圖的學習Paint,Canvas(一)

編輯:關於Android編程

前言

安卓2D繪圖,都是主要涉及到2個類:Paint,Canvas.

一,Paint

Paint畫筆,用於指定圖形或者文字的顏色,大小等。
常用方法:
setAntiAlias: 設置畫筆的鋸齒效果。
setColor: 設置畫筆顏色
setAlpha: 設置Alpha值
setTextSize: 設置字體尺寸。
setStyle: 設置畫筆風格,空心或者實心。
setStrokeWidth: 設置空心的邊框寬度。

1,HelloWorld

先從經典的helloworld開始,我們畫出一個藍色,字體大小為20sp的HelloWorld。
效果:
圖片1
代碼:

    /**
     * 字體顏色
     */
    private int mTextColor = 0xff0000ff;
    /**
     * 畫筆
     */
    private Paint mPaint;
    /**
     * 繪制的文本
     */
    private String text  = HelloWorld;

    public CanvasView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        //初始化畫筆,設置字體大小,顏色
        mPaint = new Paint();
        mPaint.setTextSize(sp2px(20));
        mPaint.setColor(mTextColor);
        setBackgroundColor(Color.parseColor(#fff1f1f1));
    }

    public CanvasView(Context context, AttributeSet attrs) {
        this(context, attrs,0);
    }

    public CanvasView(Context context) {
        this(context,null);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        //設置該View的大小為文字的大小
        int width = (int) mPaint.measureText(text);
        int height = (int) Math.abs(mPaint.descent()-mPaint.ascent());
        widthMeasureSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY);
        heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        //在canvas上畫出文字,參數分別為:文本字符串,文字X和Y的偏移,畫筆
        canvas.drawText(text, 0, getHeight()-mPaint.descent(), mPaint);
    }

    private int sp2px(int value){
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, value, getResources().getDisplayMetrics());
    }

在構造函數中初始化畫筆,然後在onDraw()方法中調用canvas的drwaText()方法即可。為了精確,我把View的高度和寬度設為了文字的寬度和高度。這裡還涉及到字體偏移的問題,後面再一起討論。

二,Canvas

Canvas畫布,就像黑板一樣,可以理解為畫畫的背景。
常用方法:
drawColor();設置畫布背景色
drawLine();線
drawRect()矩形
drawRoundRect();圓角矩形
drawArc();圓弧,三點鐘方向為0°
drawCircle();

1,線

先從最簡單的幾何圖形,開始學習canvas的使用方法。
效果:
線
代碼:

mPaint.setStrokeWidth(dp2px(2));
canvas.drawLine(0, 10, getWidth(), 10, mPaint);

設置畫筆寬度,畫出線條。drawLine()方法中,前兩個參數為第一個點坐標(x1,y1),第3,4個參數為第二個點的坐標(x2,y2),最後一個為畫筆。

2,矩形

效果:
11
代碼:

    mPaint.setStrokeWidth(dp2px(2));
    //設置風格為空心軌跡
    mPaint.setStyle(Style.STROKE);
    RectF rectF = new RectF(getWidth()/2, 10, getWidth()-10, getHeight()-10);
    canvas.drawRoundRect(rectF, 10, 10, mPaint);

設置Paint的Style為空心軌跡,根據2個點的坐標畫出矩形,圓角矩形是通過在一個矩形中繪制的。drawRect()方法的參數和線條完全相同,都是根據2個坐標點來繪制的。drawRoundRect()方法參數為矩形,x方向上的圓角,y方向上的圓角,畫筆

3,圓

效果:
圓
代碼:

canvas.drawCircle(getWidth()/2, getHeight()/2, getWidth()/2-30, mPaint);    

同樣設置好畫筆後,繪制圓形。參數分別為:圓心的坐標(x1,y1),圓的半徑,畫筆。

4,圓弧

效果:
圓弧
代碼:

    //設置畫筆抗鋸齒(圓滑)
        mPaint.setAntiAlias(true);
        RectF rectF = new RectF(0, 0, getWidth()/2, getHeight());
        canvas.drawArc(rectF, 0, 90, true, mPaint);
        RectF rectF2 = new RectF(getWidth()/2, 0, getWidth(), getHeight());
        canvas.drawArc(rectF2, 0, 90, false, mPaint);

圓弧是在一個矩形中畫出,所以我們先初始化一個矩形,然後再在這個矩形中,繪制圓弧。drawArc()方法參數分別為:矩形,圓弧中心的坐標(x1,y1),是否連接圓點,畫筆。

5,圖片

原始圖片:
1
效果:
1
代碼:

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.star);
        canvas.drawBitmap(bitmap, 10, 10, mPaint);

將圖片拷貝到drawable文件夾下,生成bitmap對象,然後通過canvas繪制。
drawBitmap()方法參數分別為:bitmap對象,x方向偏移量,y方向偏移量,畫筆。

三,Path

通過Path這個類,我們可以畫出三角形,梯形等多邊形。
常用方法:
moveTo();設置地點
lineTo();連接2點
close();連接起點和終點

1,三角形

效果:
1
代碼:

        Path angle = new Path();
        angle.moveTo(50, 0);//設置起點
        angle.lineTo(0, 100);
        angle.lineTo(100, 100);
        angle.close();//閉合路徑
        canvas.drawPath(angle, mPaint);

通過建立一個三角形路徑,在畫布上繪制出。

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved