Android Canvas和Paint基本使用

    這篇文章主要介紹下畫筆Paint和畫布Canvas的基本使用java

    1.Paintcanvas

   建立對象Paint mPaint = new Paint();數組

   經常使用的基本方法有 :post

                    mPaint.setAntiAlias(true); (抗鋸齒)學習

          mPaint.setColor(Color.WHITE);(畫筆顏色)動畫

          mPaint.setARGB(int a, int r, int g, int b);取值都是0~255 spa

          mPaint.setAlpha (int a);設置畫筆透明度,取值0~255.net

          mPaint.setDither(boolean dither):防抖動,這個屬性的需求場景主要出如今繪製漸變色彩或含漸變的圖片時,Android對不含alpha通道的圖片會進行一個轉化3d

          mPaint.setStyle(畫筆樣式)code

          mPaint.setStyle(Paint.Style style):設置畫筆的樣式,爲FILL,FILL_OR_STROKE,或STROKE

          mPaint.setStrokeCap(設置畫筆帽)

          mPaint.setStrokeCap(Paint.Cap cap):當畫筆樣式爲STROKE或FILL_OR_STROKE時,設置筆刷的圖形樣式,如圓形樣式;Cap.ROUND,或方形樣式Cap.SQUARE

          mPaint.setStrokeWidth(float width):當畫筆樣式爲STROKE或FILL_OR_STROKE時,設置筆刷的粗細度

          mPaint.setXfermode(Xfermode xfermode):設置圖形重疊時的處理方式,如合併,取交集或並集

             mPaint.setShadowLayer(float radius ,float dx,float dy,int color):在圖形下面設置陰影層,產生陰影效果,radius爲陰影的角度,dx和dy爲陰影在x軸和y軸上的距離,color爲陰影                                                                                                        的顏色

   2. Canvas基本用法

    2.1 基本方法有

      canvas.drawArc ();畫扇形

      canvas.drawCircle();畫圓

      canvas.drawOval();畫橢圓

      canvas.drawLine();畫線

      canvas.drawPoint();畫點

      canvas.drawRect();畫矩形

         canvas.drawRoundRect();畫圓角矩形

      canvas.drawVertices();畫頂點

           canvas.drawPath();畫路徑

                      canvas.drawBitmap();畫位圖

         canvas.drawText() ;畫文字

    2.2

      2.2.1 畫扇形

           private void drawArc(Canvas canvas) {

       RectF rectF = new RectF(0, 0, 100, 100);       paint.setColor(Color.parseColor("#33333333"));       //oval :指定圓弧的外輪廓矩形區域。       //startAngle: 圓弧起始角度,單位爲度。從180°爲起始點       //sweepAngle: 圓弧掃過的角度,順時針方向,單位爲度。       //useCenter: 若是爲True時,在繪製圓弧時將圓心包括在內,一般用來繪製扇形。若是false會將圓弧的兩端用直線鏈接       //paint: 繪製圓弧的畫板屬性,如顏色,是否填充等       canvas.drawRect(rectF,paint);       paint.setColor(Color.parseColor("#ff0000"));       canvas.drawArc(rectF,0,90,true,paint);     }
       運行效果以下:
        

      
2.2.2 畫圓
         代碼以下
        
private void drawCircle(Canvas canvas) {
          paint.setColor(Color.GREEN);          //cx : 圓心在x軸上的座標          //cy : 圓心的y軸上的座標          //radius: 半徑          canvas.drawCircle(50,50,50,paint);        }
        效果以下:
        

      2.2.3 畫橢圓
         代碼以下:
         
private void drawOval(Canvas canvas) {
          paint.setColor(Color.BLACK);         RectF rectF = new RectF(0, 0, 150, 100);         //oval : 外接矩形         canvas.drawOval(rectF,paint);       }
        效果以下:
 

        

        2.2.4   畫線

          代碼以下:

          private void drawLine(Canvas canvas) {

         canvas.drawLine(0,0,100,100,paint);         canvas.translate(0,110);         //畫一組線         float[] pts={0,0,100,0,    100,0,100,100,    100,100,0,100, 1,100,1,0};         //線寬         paint.setStrokeWidth((float) 2.0);         //pts : 繪製直線的端點數組,每條直線佔用4個數據。         //canvas.drawLines(pts, paint);         //offset : 指定跳過的數據個數         //count : 指定取出數據的個數         canvas.drawLines(pts,4,12,paint);       }
          效果以下:
          

 

     2.2.5 畫點

          代碼以下:

           private void drawPoint(Canvas canvas) {

         paint.setStrokeWidth((float) 5.0);         canvas.drawPoint(50,50,paint);         canvas.translate(0,100);         float[] pst = {20,20,40,40,60,60};         paint.setColor(Color.RED);         canvas.drawPoints(pst,paint);         canvas.translate(0,100);         //跳過前兩個元素         canvas.drawPoints(pst,2,4,paint);           }
          效果以下: 
          

      2.2.6  畫矩形

         代碼以下:

        private void drawRect(Canvas canvas) {         canvas.drawRect(0,0,100,100,paint);         canvas.translate(0,110);         canvas.drawRect(new RectF(0,0,100,100),paint);         canvas.translate(0,110);         canvas.drawRect(new Rect(0,0,100,100),paint);       }
        效果以下:
        

      2.2.7 畫圓角矩形

        代碼以下:

        private void drawRoundRect(Canvas canvas) {

         paint.setColor(Color.BLUE);         //rect : 要繪製的矩形         //rx : x軸方向的弧度         //ry : y軸方向上的弧度         canvas.drawRoundRect(new RectF(0,0,100,100),10,10,paint);    }
        效果以下:
        

    2.2.8 畫路徑
        代碼以下:
        
private void drawPath(Canvas canvas) {
          Path path = new Path(); //Path對象         path.moveTo(10, 50); //起始點         path.lineTo(50, 50); //連線到下一點          path.lineTo(10, 150); //連線到下一點          path.lineTo(50, 100); //連線到下一點         path.lineTo(50, 100); //連線到下一點         paint.setColor(Color.RED);//紅色         canvas.drawPath(path, paint); //繪製任意多邊形       }
        效果以下:
        

    2.2.9 畫圖片
        代碼以下:
        
private void drawBitmap(Canvas canvas) {
         Bitmap bitmap=((BitmapDrawable)getResources().getDrawable(R.mipmap.ic_launcher)).getBitmap();         //left : 位圖距左邊的偏移量         //top : 位圖距頂部的偏移量         Rect rect = new Rect(0, 0, 100, 100);         RectF rectf = new RectF(0, 0, 50, 50);         //src : 是對圖片進行裁截,如果空null則顯示整個圖片         //dst :是圖片在Canvas畫布中顯示的區域,大於src則把src的裁截區放大, 小於src則把src的裁截區縮小。         canvas.drawBitmap(bitmap,rect,rectf,paint);       }
         效果以下:
         

     2.2.10 畫文字
         代碼以下
        
 private void drawText(Canvas canvas) {
          paint.setTextSize(30);         Paint.FontMetrics fm = paint.getFontMetrics();         //x : 繪製時x軸偏移量         //y :繪製時y軸偏移量         canvas.drawText("Android",0,(fm.bottom - fm.top) / 2,paint);//這裏要計算文字繪製的起點,由於文字是按baseLine來繪製的。       }
        效果以下:
        

 

        最後咱們看一個例子 實現下面這種效果:
        
        首先咱們定義一個view 實現onDraw()方法 代碼以下:
        

          咱們經過不斷改變mCurPercent以後調用postInvalidate()方法進行實時繪製,就能看到進度動畫了。其實Canvas功能還能很強大的,你們能夠不斷的學習。

          這篇文章不錯 推薦下 http://blog.csdn.net/wangrain1/article/details/73287908

相關文章
相關標籤/搜索