Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> Android自定義View之使用貝塞爾曲線實現流量進度條

Android自定義View之使用貝塞爾曲線實現流量進度條

編輯:Android開發教程

第一次寫帶圖片的博客,多少還是有點緊張,效果不好,請將就著看,前面的圖是今天要寫的控件的效果圖,元素不多,分別是一個按鈕和一個自定義的控件。

在此以前,我看過許多的書,比如《Android群英傳》、《第一行代碼》等,也看了很多大神的博客,但是即便是這樣,當我看到這麼多代碼的時候,一直都沒有真正的動手去敲過這些代碼,以至於我總是覺得自定義View是一個多麼高深莫測的技術,我們這些小白是難以觸及的,但是當昨晚看了一篇雞湯之後,覺得人還是要學會專注,要耐得住寂寞,要沉得住氣。所以在未來的幾天,我也會持續的更新自己的博客,希望能夠得到大家的監督,也希望能夠一起成長。

一般來說,不到迫不得已,還是不要去自定義自己的控件,畢竟現在Android API已經給我提供了功能這麼強大的控件了,而且你也能夠發現,就算是這麼強大的谷歌,很多控件也還是有自己的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);
    }
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved