自定義View —— drawBitmap

自定義View —— drawBitmap

最近在復(fù)習(xí)自定義view拾氓,學(xué)習(xí)了GitHub上面有一個(gè)非常詳細(xì)的自定義view的教程镰吆,就打算跟著把里面的demo都做一遍卵慰,然后記錄一下學(xué)習(xí)到的checkView梢为。教程地址

效果圖

drawBitmap是指將一張圖片一張圖片畫在畫布上面萨咕。這里面調(diào)用的:

public void drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint) {}

參數(shù)的含義就很好理解了:
bitmap:畫什么圖片
src:要畫圖片中的哪個(gè)部分
dst:要把圖片畫到畫布中的哪個(gè)位置
paint:畫筆

我們這里需要的一個(gè)長圖:

這個(gè)drawBitmap方法是可以重復(fù)使用的,可以多次畫冀宴,然后畫出來的效果會(huì)疊加在一起灭贷,那么我們便可以第一次畫一個(gè)非常小的對(duì)號(hào)的一部分,然后一點(diǎn)一點(diǎn)地多略贮,最后就成為一個(gè)動(dòng)態(tài)的效果了甚疟,我們事分成了13次畫的,通過的事handler來控制實(shí)現(xiàn)的逃延。

核心代碼:


mHandler = new Handler() {

            @Override public void handleMessage(Message msg) {
                super.handleMessage(msg);
                //確定當(dāng)前沒有view
                if (animCurrentPage < animMaxPage && animCurrentPage >= 0) {
                    //畫一下
                    invalidate();
                    if (animState == ANIM_NULL) {
                        return;
                    }
                    //判斷當(dāng)前是要畫對(duì)號(hào)览妖,然后每次動(dòng)態(tài)移動(dòng)一點(diǎn)
                    if (animState == ANIM_CHECK) {
                        animCurrentPage++;
                    } else if (animState == ANIM_UNCHECK) {
                        animCurrentPage--;
                    }

                    // 延時(shí)發(fā)送消息,然后自己接收揽祥,形成了一個(gè)循環(huán)
                    this.sendEmptyMessageDelayed(0, animDuration / animMaxPage);


                } else {
                    //不需要畫了黄痪,恢復(fù)到默認(rèn)值
                    if (isCheck) {
                        animCurrentPage = animMaxPage - 1;
                    } else {
                        animCurrentPage = -1;
                    }

                    invalidate();
                    animState = ANIM_NULL;
                }
            }
        };


@Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //將畫筆移到view的中央
        canvas.translate(mWidth / 2, mHeight / 2);
        //畫一個(gè)圓
        canvas.drawCircle(0, 0, 240, mPaint);

        //找到高度
        int sideLength = okBitmap.getHeight();
        
        //控制畫出圖片上面的哪一個(gè)部分
        Rect src = new Rect(sideLength * animCurrentPage, 0, sideLength * (animCurrentPage + 1), sideLength);
        
        //畫在畫布上面的哪個(gè)位置
        Rect dst = new Rect(-200, -200, 200, 200);

        //畫
        canvas.drawBitmap(okBitmap, src, dst, null);
    }


public void check() {
        //觸發(fā)想要繪畫的方法
        if (animState != ANIM_NULL || isCheck) {
            return;
        }
        animState = ANIM_CHECK;
        animCurrentPage = 0;
        mHandler.sendEmptyMessageDelayed(0, animDuration / animMaxPage);
        isCheck = true;
    }

到這里一個(gè)簡(jiǎn)單的自定義view就已經(jīng)實(shí)現(xiàn)咯~

源碼地址https://github.com/linsir6/mCustomView/tree/master/CheckView

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市盔然,隨后出現(xiàn)的幾起案子桅打,更是在濱河造成了極大的恐慌是嗜,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挺尾,死亡現(xiàn)場(chǎng)離奇詭異鹅搪,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來摊欠,“玉大人陕靠,你說我怎么就攤上這事流炕。” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長坠非。 經(jīng)常有香客問我,道長果正,這世上最難降的妖魔是什么炎码? 我笑而不...
    開封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮秋泳,結(jié)果婚禮上潦闲,老公的妹妹穿的比我還像新娘。我一直安慰自己迫皱,他們只是感情好歉闰,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著卓起,像睡著了一般新娜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上既绩,一...
    開封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音还惠,去河邊找鬼饲握。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蚕键,可吹牛的內(nèi)容都是我干的救欧。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼锣光,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼笆怠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起誊爹,我...
    開封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤蹬刷,失蹤者是張志新(化名)和其女友劉穎瓢捉,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體办成,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡泡态,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了迂卢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片某弦。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖而克,靈堂內(nèi)的尸體忽然破棺而出靶壮,到底是詐尸還是另有隱情,我是刑警寧澤员萍,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布腾降,位于F島的核電站,受9級(jí)特大地震影響充活,放射性物質(zhì)發(fā)生泄漏蜂莉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一混卵、第九天 我趴在偏房一處隱蔽的房頂上張望映穗。 院中可真熱鬧,春花似錦幕随、人聲如沸蚁滋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辕录。三九已至,卻和暖如春梢卸,著一層夾襖步出監(jiān)牢的瞬間走诞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來泰國打工蛤高, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蚣旱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓戴陡,卻偏偏與公主長得像塞绿,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子恤批,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

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