Android2D繪圖基礎

jopen 10年前發布 | 51K 次閱讀 Android Android開發 移動開發

Android中的2D繪圖機制,在Android中繪制任何圖形都需要在Canvas上進行,而要使用Canvas就必須使用View.onDraw()方法完成繪制工作,因此需要我們編寫一個繼承自View的類,并覆蓋onDraw()方法。下面來詳細介紹Android中繪圖的基礎內容。

     一、點

     drawPoint(float x,float y,Paint paint)方法用于在指定點繪制一個點

     drawPoints(float [] pts,int offset,int count,Paint paint)方法用于從pts中的第offest個位置起選取count個元素作為多個點的坐標,因此count為偶數,當count為基數時,將忽略最后一個元素。

     drawPoints(float [] pts,Paint paint)方法是drawPoints()的重載方法,所有坐標都將參與繪制過程。

     二、直線

     drawLine(float startx,float starty,loat stopx,float stopy,Paint paint)方法用于在點(startx,starty)和點(stopx,stopy)之間繪制一條直線

     drawLines(float [] pts,int offset,int count,Paint paint)方法定義類似于drawPoints()方法

     drawLines(float [] pts,Paint paint)方法定義類似于drawPoints()方法

     三、矩形

     drawRect(float x1,float y1,float x2,float y2,Paint paint)方法用于繪制左上角頂點為(x1,y1),右下角頂點為(x2,y2)的矩形

     drawRect(Rect rect,Paint paint)用于繪制一個指定的矩形

     四、多邊形

     drawVertices(VertexMode mode,int count,float[] pts,0,null,0,null,0,null,0,0,Paint paint)方法用于繪制一個多邊形,其中count為坐標的個數,等于pts的大小。理論上此方法可以繪制矩形,實際上此方法的本質是繪制無數個三角形。具體的參數大家可以自行查閱官方API文檔。

     五、弧線

     drawArc(Rect rect,float startAngle,float sweepAngle,bool useCenter,Paint paint)方法用于在矩形rect內部(此矩形并不會繪制)繪制一個起始角度為startAngle,結束角度為sweepAngle的弧,useCenter將決定這段弧是否會顯示起點與終點的連線。當sweepAngle-startAngle=360時,繪制效果是一個橢圓。

     六、圓

    drawCircle(float cx,float cy,float r,Paint paint)方法將繪制一個以(cx,cy)為圓心,r為半徑的圓。

    七、文字

    drawText(String s, float x, float y, Paint paint)方法將在(x,y)處繪制字符串s.

    八、位圖

    drawBitmap(Bitmap bitmap,float left,float top,Paint paint)

    drawBitmap(Bitmap bitmap,Rect src,Rect dst,Paint paint) 

    九、Paint 

    Paint是筆刷類,主要用于設置繪圖相關的屬性。主要方法:

   setColor()方法用于設定筆刷顏色

    setStrokeWidth()方法用于設定筆刷寬度

    setStyle()方法用于設定筆刷的樣式

     暫時就介紹到這里吧,更多的方法大家可以自己去了解,下面給出我的示例代碼,供大家參考:

     1、繼承自View的DrawView

    package com.android.DroidDraw;

import android.annotation.SuppressLint;  
import android.content.Context;  
import android.graphics.Bitmap;  
import android.graphics.BitmapFactory;  
import android.graphics.Canvas;  
import android.graphics.Canvas.VertexMode;  
import android.graphics.Color;  
import android.graphics.Paint;  
import android.graphics.Paint.Style;  
import android.graphics.Rect;  
import android.graphics.RectF;  
import android.view.View;  

public class DrawView extends View   
{  

    public DrawView(Context mContext) {  
        super(mContext);  
        setBackgroundColor(Color.BLACK);  
    }  

    @SuppressLint("DrawAllocation")  
    @Override  
    protected void onDraw(Canvas mCanvas)   
    {  
        super.onDraw(mCanvas);  
        //定義4個點的集合  
            float[] mPoints=new float[]{150,20,35,150,200,30,78,60};  
        //創建筆刷  
        Paint mPaint=new Paint();  
        //設置筆刷顏色為白色  
        mPaint.setColor(Color.WHITE);  
        //設置畫筆大小  
        mPaint.setStrokeWidth(1);  
        //在(100,20)繪制一點  
        mCanvas.drawPoint(100, 20, mPaint);  

        //設置筆刷顏色為白色  
        mPaint.setColor(Color.WHITE);  
        //設置畫筆大小  
        mPaint.setStrokeWidth(1);  
        //在(100,20)繪制一點  
        mCanvas.drawPoint(100, 20, mPaint);  
        //在指定坐標處繪制一組點  
        mCanvas.drawPoints(mPoints, mPaint);  

        //在(20,35)、(45,200)兩點間繪制一條直線  
        mCanvas.drawLine(20, 35, 45, 200, mPaint);  
        //由給定的點集合繪制一系列直線  
        mCanvas.drawLines(mPoints, mPaint);  

        //通過繪制直線繪制三角形  
        mCanvas.drawLine(20, 35, 45, 200, mPaint);  
        mCanvas.drawLine(45, 200, 55, 80, mPaint);  
        mCanvas.drawLine(55, 80, 20, 35, mPaint);  

        //通過繪制多邊形繪制三角形  
        mCanvas.drawVertices(VertexMode.TRIANGLE_FAN, 6, new float[]{20,35,45,200,55,80}, 0, null, 0, null, 0, null, 0, 0, mPaint);  

        //繪制矩形  
        mCanvas.drawRect(new Rect(20,210,100,255), mPaint);  
        //繪制二維碼校準框  
        mPaint.setStyle(Style.STROKE);  
        //繪制矩形框  
        mCanvas.drawRect(new Rect(10,10,110,110), mPaint);  
        //繪制左上角  
        mCanvas.drawLine(20, 20, 20, 50, mPaint);  
        mCanvas.drawLine(20, 20, 50, 20, mPaint);  
        //繪制左下角  
        mCanvas.drawLine(20, 100, 20, 70, mPaint);  
        mCanvas.drawLine(20, 100, 50, 100, mPaint);  
        //繪制右上角  
        mCanvas.drawLine(100, 20, 70, 20, mPaint);  
        mCanvas.drawLine(100, 20, 100, 50, mPaint);  
        //繪制右下角  
        mCanvas.drawLine(100, 100, 100, 70, mPaint);  
        mCanvas.drawLine(100, 100, 70, 100, mPaint);  

        //繪制圓  
        mCanvas.drawCircle(120, 120, 50, mPaint);  

        //繪制弧  
        mCanvas.drawArc(new RectF(50,24,60,75), 30f, 120f, true, mPaint);  

        //繪制橢圓  
        mCanvas.drawArc(new RectF(50,64,80,75), 0f, 360f, true, mPaint);  

        //繪制文字  
        mCanvas.drawText("Android繪圖基礎", 100, 150, mPaint);  

        //繪制位圖  
        Bitmap mBitmap=BitmapFactory.decodeResource(getResources(), R.drawable.t);  
        mCanvas.drawBitmap(mBitmap,   
                new Rect(0,0,mBitmap.getWidth(), mBitmap.getHeight()),  
                new Rect(200,200,mBitmap.getWidth()/2, mBitmap.getHeight()/2),   
                mPaint);  
    }  


}  </pre><a style="text-indent:0px;" title="派生到我的代碼片" href="/misc/goto?guid=4959552042547716026" target="_blank"></a></div>

</div> </div>

 

       2、主類MainActivity

package com.android.DroidDraw;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

@Override  
protected void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    DrawView mView=new DrawView(this);  
    setContentView(mView);  
}  

@Override  
public boolean onCreateOptionsMenu(Menu menu) {  
    // Inflate the menu; this adds items to the action bar if it is present.  
    getMenuInflater().inflate(R.menu.main, menu);  
    return true;  
}  

} </pre></div> </div> </div> 來自:http://blog.csdn.net/qinyuanpei/article/details/20203677

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!