Android畫圖Path的使用

來源:互聯網
上載者:User
/**       * Paint類介紹       *        * Paint即畫筆,在繪圖過程中起到了極其重要的作用,畫筆主要儲存了顏色,       * 樣式等繪製資訊,指定了如何繪製文本和圖形,畫筆對象有很多設定方法,       * 大體上可以分為兩類,一類與圖形繪製相關,一類與文本繪製相關。              *        * 1.圖形繪製       * setARGB(int a,int r,int g,int b);       * 設定繪製的顏色,a代表透明度,r,g,b代表顏色值。       *        * setAlpha(int a);       * 設定繪製圖形的透明度。       *        * setColor(int color);       * 設定繪製的顏色,使用顏色值來表示,該顏色值包括透明度和RGB顏色。       *       * setAntiAlias(boolean aa);       * 設定是否使用消除鋸齒功能,會消耗較大資源,繪製圖形速度會變慢。       *        * setDither(boolean dither);       * 設定是否使用映像抖動處理,會使繪製出來的圖片顏色更加平滑和飽滿,映像更加清晰       *        * setFilterBitmap(boolean filter);       * 如果該項設定為true,則映像在動畫進行中會濾掉對Bitmap映像的最佳化操作,加快顯示       * 速度,本設定項依賴於dither和xfermode的設定       *        * setMaskFilter(MaskFilter maskfilter);       * 設定MaskFilter,可以用不同的MaskFilter實現濾鏡的效果,如濾化,立體等       *        * setColorFilter(ColorFilter colorfilter);       * 設定顏色過濾器,可以在繪製顏色時實現不用顏色的變換效果       *        * setPathEffect(PathEffect effect);       * 設定繪製路徑的效果,如點畫線等       *        * setShader(Shader shader);       * 設定映像效果,使用Shader可以繪製出各種漸層效果       *       * setShadowLayer(float radius ,float dx,float dy,int color);       * 在圖形下面設定陰影層,產生陰影製作效果,radius為陰影的角度,dx和dy為陰影在x軸和y軸上的距離,color為陰影的顏色       *        * setStyle(Paint.Style style);       * 設定畫筆的樣式,為FILL,FILL_OR_STROKE,或STROKE       *        * setStrokeCap(Paint.Cap cap);       * 當畫筆樣式為STROKE或FILL_OR_STROKE時,設定筆刷的圖形樣式,如圓形樣式       * Cap.ROUND,或方形樣式Cap.SQUARE       *        * setSrokeJoin(Paint.Join join);       * 設定繪製時各圖形的結合方式,如凹凸貼圖等       *        * setStrokeWidth(float width);       * 當畫筆樣式為STROKE或FILL_OR_STROKE時,設定筆刷的粗細度       *        * setXfermode(Xfermode xfermode);       * 設定圖形重疊時的處理方式,如合并,取交集或並集,經常用來製作橡皮的擦除效果       *        * 2.文本繪製       * setFakeBoldText(boolean fakeBoldText);       * 類比實現粗體文字,設定在小字型上效果會非常差       *        * setSubpixelText(boolean subpixelText);       * 設定該項為true,將有助於文本在LCD螢幕上的顯示效果       *        * setTextAlign(Paint.Align align);       * 設定繪製文字的對齊方向       *      * setTextScaleX(float scaleX);      * 設定繪製文字x軸的縮放比例,可以實現文字的展開的效果       *        * setTextSize(float textSize);       * 設定繪製文字的字型大小大小       *        * setTextSkewX(float skewX);       * 設定斜體文字,skewX為傾斜弧度       *        * setTypeface(Typeface typeface);       * 設定Typeface對象,即字型風格,包括粗體,斜體以及襯線體,非襯線體等       *        * setUnderlineText(boolean underlineText);       * 設定帶有底線的文字效果       *        * setStrikeThruText(boolean strikeThruText);       * 設定帶有刪除線的效果       *        */  
private class MyView2 extends View {        public MyView2(Context context) {            super(context);        }        @Override        protected void onDraw(Canvas canvas)        {            super.onDraw(canvas);            canvas.drawColor(Color.WHITE);            Paint paint = new Paint();            paint.setAntiAlias(true);            paint.setColor(Color.RED);            paint.setStyle(Paint.Style.STROKE);//設定為空白心            paint.setStrokeWidth(3);            canvas.drawCircle(40, 40, 30, paint);            canvas.drawRect(10, 90, 70, 150, paint);            canvas.drawRect(10, 170, 70, 200, paint);            canvas.drawOval(new RectF(10, 220, 70, 250), paint);            Path path = new Path();//三角形            path.moveTo(10, 330);            path.lineTo(70, 330);            path.lineTo(40, 270);            path.close();            canvas.drawPath(path, paint);            Path path1 = new Path();//梯形            path1.moveTo(10, 410);//繪畫基點            path1.lineTo(70, 410);            path1.lineTo(55, 350);            path1.lineTo(25, 350);            path1.close();//把開始的點和最後的點串連在一起,構成一個封閉圖形            /*             * 最重要的就是movtTo和close,如果是Style.FILL的話,不設定close,也沒有區別,可是如果是STROKE模式,             * 如果不設定close,圖形不封閉。             *              * 當然,你也可以不設定close,再添加一條線,效果一樣。             */            canvas.drawPath(path1, paint);                                                            ///////////////////////////////////////第二列            paint.setColor(Color.BLUE);            paint.setStyle(Paint.Style.FILL);//設定實心            canvas.drawCircle(120, 40, 30, paint);            canvas.drawRect(90, 90, 150, 150, paint);            canvas.drawRect(90, 170, 150, 200, paint);            RectF re2 = new RectF(90, 220, 150, 250);            canvas.drawOval(re2, paint);            Path path2 = new Path();            path2.moveTo(90, 330);            path2.lineTo(150, 330);            path2.lineTo(120, 270);            path2.close();            canvas.drawPath(path2, paint);            Path path3 = new Path();            path3.moveTo(90, 410);            path3.lineTo(150, 410);            path3.lineTo(135, 350);            path3.lineTo(105, 350);            path3.close();            canvas.drawPath(path3, paint);                                    ////////////////////////////////////////////////////第三列                        /*             * LinearGradient shader = new LinearGradient(0, 0, endX, endY, new             * int[]{startColor, midleColor, endColor},new float[]{0 , 0.5f,             * 1.0f}, TileMode.MIRROR);             * 參數一為漸層起初點座標x位置,參數二為y軸位置,參數三和四分辨對應漸層終點             * 其中參數new int[]{startColor, midleColor,endColor}是參與漸層效果的顏色集合,              * 其中參數new float[]{0 , 0.5f, 1.0f}是定義每個顏色處於的漸層相對位置, 這個參數可以為null,如果為null表示所有的顏色按順序均勻的分布             */            Shader mShader = new LinearGradient(0, 0, 100, 100,            new int[] { Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW },            null, Shader.TileMode.REPEAT);            // Shader.TileMode三種模式            // REPEAT:沿著漸層方向迴圈重複            // CLAMP:如果在預先定義的範圍外畫的話,就重複邊界的顏色            // MIRROR:與REPEAT一樣都是迴圈重複,但這個會對稱重複            paint.setShader(mShader);// 用Shader中定義定義的顏色來話            canvas.drawCircle(200, 40, 30, paint);            canvas.drawRect(170, 90, 230, 150, paint);            canvas.drawRect(170, 170, 230, 200, paint);            RectF re3 = new RectF(170, 220, 230, 250);            canvas.drawOval(re3, paint);            Path path4 = new Path();            path4.moveTo(170, 330);            path4.lineTo(230, 330);            path4.lineTo(200, 270);            path4.close();            canvas.drawPath(path4, paint);            Path path5 = new Path();            path5.moveTo(170, 410);            path5.lineTo(230, 410);            path5.lineTo(215, 350);            path5.lineTo(185, 350);            path5.close();            canvas.drawPath(path5, paint);                        //////////////////////////////////第4列            paint.setTextSize(24);            canvas.drawText("圓形", 240, 50, paint);            canvas.drawText("正方形", 240, 120, paint);            canvas.drawText("長方形", 240, 190, paint);            canvas.drawText("橢圓形", 240, 250, paint);            canvas.drawText("三角形", 240, 320, paint);            canvas.drawText("梯形", 240, 390, paint);        }    }

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.