老菜鳥的柱狀統(tǒng)計控件

別廢話,先看圖

柱狀圖

這是一個統(tǒng)計控件舌菜。有點像progressbar。
在老菜鳥還小的時候亦镶,看到自定義的東西就抖日月。歲月流逝,小菜鳥依然堅定不移的暗戀著凍齡的志玲妹妹缤骨,可是皺紋已經(jīng)爬滿的菜鳥的丑臉“В現(xiàn)在老菜鳥看到自定義的東西就想擼一擼,雖然手法很搓绊起,技巧很low精拟。

  • 首先分析控件。依然是從自定義控件三部曲之onMeasure開始,一組數(shù)據(jù)中蜂绎,match_parent的width是最大的那個數(shù)據(jù)栅表。比如總經(jīng)濟{ 4000,3000,2000 },那么4000的width是控件的match_parent师枣,3000就是最大width的3/4谨读。so,width不能onMeasure里計算了坛吁。要根據(jù)服務(wù)器給的數(shù)據(jù)來劳殖。
  • onDraw,我們把經(jīng)濟對應(yīng)的節(jié)段可以看作是一個長方形拨脉,可以用drawRect方法哆姻。

開擼

根據(jù)上面分析,首先要算出來最大的總經(jīng)濟玫膀,也就是4000矛缨,然后傳進去每條數(shù)據(jù)。然后根據(jù)數(shù)據(jù)繪制出來帖旨。

  • 初始化設(shè)置顏色
  • 數(shù)據(jù)處理箕昭,按百分比處理每一段的數(shù)據(jù)。
    public void setData(float death, float buy, float buiding, float kill, float hero, float other, final float max) {
        rateList.clear();
        final float total = death + buy + buiding + kill + hero + other;
        rateList.add((float) death / total);
        rateList.add((float) buy / total);
        rateList.add((float) buiding / total);
        rateList.add((float) kill / total);
        rateList.add((float) hero / total);
        rateList.add((float) other / total);
        invalidate();
    }
  • 然后繪制解阅,第一段的起點是0,終點是長度货抄,然后每一段的起點都是前一段的終點述召。
      start = 0;
        progress = 0;
        for (int i = 0; i < rateList.size() && i < colorList.size(); i++) {
            float data = rateList.get(i);
            mEnd = (int) ((progress + data) * mWidth);
            if (mEnd > width) {
                mEnd = mWidth;
            }
            mPaint.setColor(colorList.get(i));
            canvas.drawRect(start, 0, mEnd, mHeight, mPaint);
            progress = progress + data;
            start = mEnd;
        }

這樣繪制的控件長度是一樣的蟹地。即使一個經(jīng)濟是4000,一個是2000怪与,長度都一樣,不符合我們的要求分别。所以需要設(shè)置LayoutParams

    private void setLayout(ProgressView pv, int i, float max) {
        Resources resources = this.getResources();
        DisplayMetrics displayMetrics = resources.getDisplayMetrics();
        int widthPixels = displayMetrics.widthPixels;
        ViewGroup.LayoutParams params = pv.getLayoutParams();
        params.width = (int) (widthPixels * ((float) i / max));
        pv.setLayoutParams(params);
    }

這樣寫的控件一點都不靈活遍愿,如果是有5段數(shù)據(jù)茎杂,或者7段,我們就要修改源碼煌往。所以繼續(xù)優(yōu)化倾哺,優(yōu)化后的代碼就不給了轧邪。。羞海。
傳送門

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末忌愚,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子却邓,更是在濱河造成了極大的恐慌硕糊,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腊徙,死亡現(xiàn)場離奇詭異简十,居然都是意外死亡,警方通過查閱死者的電腦和手機撬腾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門螟蝙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人民傻,你說我怎么就攤上這事胰默。” “怎么了漓踢?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵牵署,是天一觀的道長。 經(jīng)常有香客問我喧半,道長奴迅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任薯酝,我火速辦了婚禮半沽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吴菠。我一直安慰自己,他們只是感情好浩村,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布做葵。 她就那樣靜靜地躺著,像睡著了一般心墅。 火紅的嫁衣襯著肌膚如雪酿矢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天怎燥,我揣著相機與錄音瘫筐,去河邊找鬼。 笑死铐姚,一個胖子當著我的面吹牛策肝,可吹牛的內(nèi)容都是我干的肛捍。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼之众,長吁一口氣:“原來是場噩夢啊……” “哼拙毫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起棺禾,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤缀蹄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后膘婶,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缺前,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡衅码,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年古胆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逸绎。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡棺牧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出颊乘,到底是詐尸還是另有隱情参淹,我是刑警寧澤浙值,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布檩小,位于F島的核電站,受9級特大地震影響规求,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜阻肿,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一丛塌、第九天 我趴在偏房一處隱蔽的房頂上張望畜疾。 院中可真熱鬧,春花似錦庸疾、人聲如沸当编。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至揍拆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嫂拴,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工筒狠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留箱沦,地道東北人。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓灶伊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親聘萨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容