Android如何繪製絢麗的彩色筆跡?
03-13
越炫酷越好
確認
取消
邀請回答
我來回答
1條回答
時間排序
|
熱門排序
|
熱門排序
米拉普拉斯
,Android工程師;冷笑話副社長;法律愛好者;...
放一張實現的圖片: ![](http://b.hiphotos.baidu.com/zhidao/wh%3D450%2C600/sign=e4af3f4f07f41bd5da06e0f064eaadfd/a6efce1b9d16fdfa36e01e8abd8f8c5495ee7bc2.jpg)感謝一下百度派,作者:MiLaplace (米拉普拉斯)***Android 繪製最重要的兩個概...
查看全部
查看全部
放一張實現的圖片: ![](http://b.hiphotos.baidu.com/zhidao/wh%3D450%2C600/sign=e4af3f4f07f41bd5da06e0f064eaadfd/a6efce1b9d16fdfa36e01e8abd8f8c5495ee7bc2.jpg)感謝一下百度派,作者:MiLaplace (米拉普拉斯)
放一張實現的圖片: ![](http://b.hiphotos.baidu.com/zhidao/wh%3D450%2C600/sign=e4af3f4f07f41bd5da06e0f064eaadfd/a6efce1b9d16fdfa36e01e8abd8f8c5495ee7bc2.jpg)感謝一下百度派,作者:MiLaplace (米拉普拉斯)***Android 繪製最重要的兩個概念是Canvas和Paint.Canvas相當於一張畫布,而Paint相當於畫筆。所以,我們要繪製絢麗的彩色筆跡主要取決於Paint.|主題|描述||-|-||Style|描述該Paint用於描述繪製內容的哪個部分:填充或者邊框||Join|描述直線與曲線如何連接||Cap|描述路徑和線條的起始部分的形態||Align|文本如何對齊|``` Paint paint = new Paint(); paint.setStyle(Paint.Style.STROKE); paint.setStrokeJoin(Paint.Join.ROUND); paint.setStrokeCap(Paint.Cap.BUTT);```### StyleThe Style specifies if the primitive being drawn is filled, stroked, or both (in the same color). The default is FILL.指定了繪製的方式:填充,描邊或者兩者。默認行為為填充。```public enum Style { FILL (0), STROKE (1), FILL_AND_STROKE (2); Style(int nativeInt) { this.nativeInt = nativeInt; } final int nativeInt; }```參考效果:灰色描邊+藍色填充![](http://a.hiphotos.baidu.com/zhidao/wh%3D450%2C600/sign=e290ef5c72f40ad115b1cfe7621c3de9/b7fd5266d016092443f37a7fdd0735fae7cd3484.jpg)我們只需要繪製線,所以使用Style.STROKE。### CapThe Cap specifies the treatment for the beginning and ending of stroked lines and paths. The default is BUTT.筆帽用於指定繪製的起點和終點的表現形式,默認是Cap.BUTT```public enum Cap { BUTT (0), ROUND (1), SQUARE (2); private Cap(int nativeInt) { this.nativeInt = nativeInt; } final int nativeInt; }```![](http://g.hiphotos.baidu.com/zhidao/wh%3D450%2C600/sign=11a84a96741ed21b799c26e1985ef1f2/91ef76c6a7efce1b0b2a13aea651f3deb48f6555.jpg)筆尖請選擇 圓形。### JoinThe Join specifies the treatment where lines and curve segments join on a stroked path. The default is MITER.如何對待連接點.``` public enum Join { MITER (0), ROUND (1), BEVEL (2); private Join(int nativeInt) { this.nativeInt = nativeInt; } final int nativeInt; }```![](http://c.hiphotos.baidu.com/zhidao/wh%3D450%2C600/sign=083dbf5bd0f9d72a17311819e11a0402/728da9773912b31ba220164d8f18367adab4e102.jpg)連接點選擇圓形即可。這個時候,我們還只是構建了基本的畫筆。重點是絢麗,個人認為絢麗表現在兩方面,一方面是顏色會變化,另外一方面是畫筆帶有其他效果。那我就以帶發光的彩虹筆作為最終效果來講解吧。我們將每一次按下和滑動的時候,繪製一條線:MotionEvent.ACTION_DOWN 和 MotionEvent.ACTION_MOVE```Canvas.drawLine();```在完成了線段繪製之後,我們改變一下我們的顏色,朝著一個方向隨機的偏移一定數值。注意,一定要使用hsv來進行變化,這樣可以保證顏色看起來變化很平滑。```int color = paint.getColor();Color.colorToHSV(color, hsv);hsv[0] += (Math.random() * 15 - 5);hsv[0] = (hsv[0] + 360) % 360;color = Color.HSVToColor(hsv);paint.setColor(color);```但是,單單只有顏色的變化是還不夠的,要有發光的效果。可以用邊緣模糊這一技術來完成發光的效果。```paint.setMaskFilter(new BlurMaskFilter());```
推薦閱讀:
***
Android 繪製最重要的兩個概念是Canvas和Paint.Canvas相當於一張畫布,而Paint相當於畫筆。所以,我們要繪製絢麗的彩色筆跡主要取決於Paint.|主題|描述||-|-||Style|描述該Paint用於描述繪製內容的哪個部分:填充或者邊框||Join|描述直線與曲線如何連接||Cap|描述路徑和線條的起始部分的形態||Align|文本如何對齊|
``` Paint paint = new Paint(); paint.setStyle(Paint.Style.STROKE); paint.setStrokeJoin(Paint.Join.ROUND); paint.setStrokeCap(Paint.Cap.BUTT);```### StyleThe Style specifies if the primitive being drawn is filled, stroked, or both (in the same color). The default is FILL.
指定了繪製的方式:填充,描邊或者兩者。默認行為為填充。```public enum Style { FILL (0), STROKE (1), FILL_AND_STROKE (2); Style(int nativeInt) { this.nativeInt = nativeInt; }final int nativeInt;
}```參考效果:灰色描邊+藍色填充![](http://a.hiphotos.baidu.com/zhidao/wh%3D450%2C600/sign=e290ef5c72f40ad115b1cfe7621c3de9/b7fd5266d016092443f37a7fdd0735fae7cd3484.jpg)我們只需要繪製線,所以使用Style.STROKE。### CapThe Cap specifies the treatment for the beginning and ending of stroked lines and paths. The default is BUTT.筆帽用於指定繪製的起點和終點的表現形式,默認是Cap.BUTT```
public enum Cap { BUTT (0), ROUND (1), SQUARE (2); private Cap(int nativeInt) { this.nativeInt = nativeInt; } final int nativeInt; }```
![](http://g.hiphotos.baidu.com/zhidao/wh%3D450%2C600/sign=11a84a96741ed21b799c26e1985ef1f2/91ef76c6a7efce1b0b2a13aea651f3deb48f6555.jpg)筆尖請選擇 圓形。### JoinThe Join specifies the treatment where lines and curve segments join on a stroked path. The default is MITER.如何對待連接點.``` public enum Join { MITER (0), ROUND (1),BEVEL (2);
private Join(int nativeInt) { this.nativeInt = nativeInt; } final int nativeInt; }```![](http://c.hiphotos.baidu.com/zhidao/wh%3D450%2C600/sign=083dbf5bd0f9d72a17311819e11a0402/728da9773912b31ba220164d8f18367adab4e102.jpg)連接點選擇圓形即可。這個時候,我們還只是構建了基本的畫筆。
重點是絢麗,個人認為絢麗表現在兩方面,一方面是顏色會變化,另外一方面是畫筆帶有其他效果。那我就以帶發光的彩虹筆作為最終效果來講解吧。我們將每一次按下和滑動的時候,繪製一條線:MotionEvent.ACTION_DOWN 和 MotionEvent.ACTION_MOVE```Canvas.drawLine();```在完成了線段繪製之後,我們改變一下我們的顏色,朝著一個方向隨機的偏移一定數值。
注意,一定要使用hsv來進行變化,這樣可以保證顏色看起來變化很平滑。```int color = paint.getColor();Color.colorToHSV(color, hsv);hsv[0] += (Math.random() * 15 - 5);hsv[0] = (hsv[0] + 360) % 360;color = Color.HSVToColor(hsv);paint.setColor(color);```但是,單單只有顏色的變化是還不夠的,要有發光的效果。可以用邊緣模糊這一技術來完成發光的效果。```paint.setMaskFilter(new BlurMaskFilter());```放一張實現的圖片: ![](http://b.hiphotos.baidu.com/zhidao/wh%3D450%2C600/sign=e4af3f4f07f41bd5da06e0f064eaadfd/a6efce1b9d16fdfa36e01e8abd8f8c5495ee7bc2.jpg)感謝一下百度派,作者:MiLaplace (米拉普拉斯)***Android 繪製最重要的兩個概念是Canvas和Paint.Canvas相當於一張畫布,而Paint相當於畫筆。所以,我們要繪製絢麗的彩色筆跡主要取決於Paint.|主題|描述||-|-||Style|描述該Paint用於描述繪製內容的哪個部分:填充或者邊框||Join|描述直線與曲線如何連接||Cap|描述路徑和線條的起始部分的形態||Align|文本如何對齊|``` Paint paint = new Paint(); paint.setStyle(Paint.Style.STROKE); paint.setStrokeJoin(Paint.Join.ROUND); paint.setStrokeCap(Paint.Cap.BUTT);```### StyleThe Style specifies if the primitive being drawn is filled, stroked, or both (in the same color). The default is FILL.指定了繪製的方式:填充,描邊或者兩者。默認行為為填充。```public enum Style { FILL (0), STROKE (1), FILL_AND_STROKE (2); Style(int nativeInt) { this.nativeInt = nativeInt; } final int nativeInt; }```參考效果:灰色描邊+藍色填充![](http://a.hiphotos.baidu.com/zhidao/wh%3D450%2C600/sign=e290ef5c72f40ad115b1cfe7621c3de9/b7fd5266d016092443f37a7fdd0735fae7cd3484.jpg)我們只需要繪製線,所以使用Style.STROKE。### CapThe Cap specifies the treatment for the beginning and ending of stroked lines and paths. The default is BUTT.筆帽用於指定繪製的起點和終點的表現形式,默認是Cap.BUTT```public enum Cap { BUTT (0), ROUND (1), SQUARE (2); private Cap(int nativeInt) { this.nativeInt = nativeInt; } final int nativeInt; }```![](http://g.hiphotos.baidu.com/zhidao/wh%3D450%2C600/sign=11a84a96741ed21b799c26e1985ef1f2/91ef76c6a7efce1b0b2a13aea651f3deb48f6555.jpg)筆尖請選擇 圓形。### JoinThe Join specifies the treatment where lines and curve segments join on a stroked path. The default is MITER.如何對待連接點.``` public enum Join { MITER (0), ROUND (1), BEVEL (2); private Join(int nativeInt) { this.nativeInt = nativeInt; } final int nativeInt; }```![](http://c.hiphotos.baidu.com/zhidao/wh%3D450%2C600/sign=083dbf5bd0f9d72a17311819e11a0402/728da9773912b31ba220164d8f18367adab4e102.jpg)連接點選擇圓形即可。這個時候,我們還只是構建了基本的畫筆。重點是絢麗,個人認為絢麗表現在兩方面,一方面是顏色會變化,另外一方面是畫筆帶有其他效果。那我就以帶發光的彩虹筆作為最終效果來講解吧。我們將每一次按下和滑動的時候,繪製一條線:MotionEvent.ACTION_DOWN 和 MotionEvent.ACTION_MOVE```Canvas.drawLine();```在完成了線段繪製之後,我們改變一下我們的顏色,朝著一個方向隨機的偏移一定數值。注意,一定要使用hsv來進行變化,這樣可以保證顏色看起來變化很平滑。```int color = paint.getColor();Color.colorToHSV(color, hsv);hsv[0] += (Math.random() * 15 - 5);hsv[0] = (hsv[0] + 360) % 360;color = Color.HSVToColor(hsv);paint.setColor(color);```但是,單單只有顏色的變化是還不夠的,要有發光的效果。可以用邊緣模糊這一技術來完成發光的效果。```paint.setMaskFilter(new BlurMaskFilter());```
推薦閱讀:
※深度反向投影網路(DBPN)--通過Back-Projection來超解析度的新方法
※紅外熱成像
※魔幻光影濾鏡(3):美女人像「劃重點」
※OTSU閾值分割