Android Canvas和Paint基本使用


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

    1.Paint

   創建對象Paint mPaint = new Paint();

   常用的基本方法有 :

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

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

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

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

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

          mPaint.setStyle(畫筆樣式)

          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

 

 

 

 

 
 

 

 
 

 

 
 
 

 

 

 


      

 

 

    

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM