第一次寫帶圖片的部落格,多少還是有點緊張,效果不好,請將就著看,前面的圖是今天要寫的控制項的效果圖,元素不多,分別是一個按鈕和一個自訂的控制項。
在此以前,我看過許多的書,比如《Android群英傳》、《第一行代碼》等,也看了很多大神的部落格,但是即便是這樣,當我看到這麼多代碼的時候,一直都沒有真正的動手去敲過這些代碼,以至於我總是覺得自訂View是一個多麼高深莫測的技術,我們這些小白是難以觸及的,但是當昨晚看了一篇雞湯之後,覺得人還是要學會專註,要耐得住寂寞,要沉得住氣。所以在未來的幾天,我也會持續的更新自己的部落格,希望能夠得到大家的監督,也希望能夠一起成長。
一般來說,不到迫不得已,還是不要去自訂自己的控制項,畢竟現在Android API已經給我提供了功能這麼強大的控制項了,而且你也能夠發現,就算是這麼強大的Google,很多控制項也還是有自己的bug,更何況我們自己寫的控制項,當然了,通過自訂控制項,來加深我們對Android系統的控制項的瞭解,這也是進階的一個好方法。好了,廢話我先說到這裡,下面開始今天的主題。
貝茲路徑這個話題,很多大神的文章都有涉及,在郭神的微信公眾號裡面專門有一篇文章講到了:http://mp.weixin.qq.com/s?__biz=MzA5MzI3NjE2MA==&mid=2650236243&idx=1&sn=00f003c809b1e3a3e5e7cb372d3ec970&scene=0#wechat_redirect ,所以我這裡就不談這個了。下面就開始進入編碼階段
建立一個Class檔案,命名為MyLineView,讓它繼承View,實現它的三個建構函式,緊接著初始化一些畫筆、Path,圓等資料。代碼如下:
1.定義變數
Paint mPaint, mPaint2; Path mPath = Path(); mViewWidth, mViewHeight; mWidth, mHeight; r, rArc, x; percent = f; RectF rectF; PointF mPointF = PointF(, );
在建構函式裡面初始化資料
public MyLineView(Context context, AttributeSet attrs) { super(context, attrs) mPaint = new Paint() mPaint(Color) mPaint() mPaint(Paint) mPaint() mPaint2 = new Paint() mPaint2(Color) mPaint2() mPaint2(Paint) }
準備工作已經做好了,緊接著我們複寫View的一個onSizeChanged()方法,故名思議,就是當控制項的大小發生改變的時候調用。我們在這裡對變數進行賦值,代碼如下:
( w, h, oldw, oldh) { .onSizeChanged(w, h, oldw, oldh); mViewWidth = w; mViewHeight = h; mWidth = mViewWidth - getPaddingLeft() - getPaddingRight(); mHeight = mViewHeight - getPaddingTop() - getPaddingBottom(); r = Math.min(mWidth, mHeight) * f; rectF = RectF(-r, -r, r, r); }