Android自訂View之使用貝茲路徑實現流量進度條

來源:互聯網
上載者:User

第一次寫帶圖片的部落格,多少還是有點緊張,效果不好,請將就著看,前面的圖是今天要寫的控制項的效果圖,元素不多,分別是一個按鈕和一個自訂的控制項。

在此以前,我看過許多的書,比如《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);    }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.