日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 系統(tǒng) > Android > 正文

Android控件實(shí)現(xiàn)水滴效果

2019-10-21 21:25:02
字體:
供稿:網(wǎng)友

看到ios版上QQ刷新效果像水滴,然后自己也想著去實(shí)現(xiàn)這樣的效果,這篇文章暫時(shí)沒有介紹下拉刷新的效果,只是單獨(dú)用一個(gè)控件來實(shí)現(xiàn)這樣的水滴效果。

效果圖如下:

Android控件,水滴

一、總體思路

1、畫兩個(gè)圓形,其中一個(gè)就是上面的大圓,還有一個(gè)是下面的小圓,大圓和小圓不斷變小,大圓的位置保持不變,小圓的位置不斷向下移動(dòng),即圓心不斷下移。 
2、畫兩邊的曲線,這時(shí)候用到貝塞爾曲線去畫。 
3、用屬性動(dòng)畫實(shí)現(xiàn)動(dòng)態(tài)的效果。

二、代碼實(shí)現(xiàn)

1、找出畫曲線的幾個(gè)關(guān)鍵點(diǎn)。

Android控件,水滴Android控件,水滴

其實(shí)我是在第一張圖的基礎(chǔ)上,再在上面分別畫兩個(gè)圓,就可以得到第二張圖了。關(guān)鍵是畫出第一張圖。

(1)在這里,p1,p2,p3,p4,這4個(gè)點(diǎn)分別對(duì)應(yīng)兩個(gè)圓的兩邊的點(diǎn),即p1到p2就是圓的直徑。p3和p4同理,那么就很容易確定這四個(gè)點(diǎn)的坐標(biāo)了。

(2)然后c1和c2是分別控制p1到p3、p2到p4的曲線,是貝塞爾曲線的控制點(diǎn)。它們的橫坐標(biāo)對(duì)應(yīng)的是p3,p4的橫坐標(biāo)(相等),縱坐標(biāo)取兩個(gè)圓心距離的一半。這樣畫出這個(gè)靜態(tài)的圖片就不難了。

(3)畫上下兩個(gè)圓進(jìn)去,就會(huì)變成第二張圖的效果。

2、在構(gòu)造方法中調(diào)用init()初始化一些基本的變量

private void init(Context context, AttributeSet attrs) {    drawFilter = new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG        | Paint.FILTER_BITMAP_FLAG);    paint = new Paint();    paint.setColor(fillColor);    // 轉(zhuǎn)換為像素單位    bigRadius = dip2px(context, bigRadius);    smallRadius = dip2px(context, smallRadius);    distance = dip2px(context, distance);  }

3、在onDraw()方法中畫水滴效果

要注意的是path需要重新new, 貝塞爾曲線的繪制,用到是path.quadTo這方法。具體可以看代碼。

@Override  protected void onDraw(Canvas canvas) {    // 必須重新new,不然路徑會(huì)重復(fù),我之前就是這樣    path = new Path();    // 把畫布移到中心    canvas.translate(width / 2, height / 2);    // 從canvas層面去除繪制時(shí)鋸齒    canvas.setDrawFilter(drawFilter);    // 當(dāng)前的兩個(gè)圓心的距離    currentDis = distance * fraction;    // 計(jì)算當(dāng)前大圓的半徑    float bigRadius = this.bigRadius - currentDis / bigPercent;    float smallRadius = 0;    if (currentDis > 5) {// 距離大于5才改變小圓的半徑      smallRadius = this.smallRadius - currentDis / smallPercent;    }    // 大圓兩邊的兩個(gè)點(diǎn)坐標(biāo)    leftX = -bigRadius;// 大圓當(dāng)前的半徑    leftY = rightY = 0;    rightX = bigRadius;// 大圓當(dāng)前的半徑    // 小圓兩邊的兩個(gè)點(diǎn)坐標(biāo)    leftX2 = -smallRadius;// 小圓當(dāng)前的半徑    leftY2 = rightY2 = currentDis;    rightX2 = -leftX2; // 小圓當(dāng)前的半徑    // 兩個(gè)控制點(diǎn)    controlX1 = -smallRadius;// x坐標(biāo)取小圓當(dāng)前的半徑大小    controlY1 = currentDis / 2;// y坐標(biāo)取兩個(gè)圓距離的一半    controlX2 = smallRadius;// x坐標(biāo)取小圓當(dāng)前的半徑大小    controlY2 = currentDis / 2;// y坐標(biāo)取兩個(gè)圓距離的一半    path.moveTo(leftX, leftY);    path.lineTo(rightX, rightY);    // 用二階貝塞爾曲線畫右邊的曲線,參數(shù)的第一個(gè)點(diǎn)是右邊的一個(gè)控制點(diǎn)    path.quadTo(controlX2, controlY2, rightX2, rightY2);    path.lineTo(leftX2, leftY2);    // 用二階貝塞爾曲線畫左邊邊的曲線,參數(shù)的第一個(gè)點(diǎn)是左邊的一個(gè)控制點(diǎn)    path.quadTo(controlX1, controlY1, leftX, leftY);    // 畫大圓    canvas.drawCircle(0, 0, bigRadius, paint);    // 畫小圓    canvas.drawCircle(0, currentDis, smallRadius, paint);    // 畫path    canvas.drawPath(path, paint);  }

4、用屬性動(dòng)畫,實(shí)現(xiàn)動(dòng)態(tài)的效果。

/*** 執(zhí)行屬性動(dòng)畫,實(shí)現(xiàn)水滴的效果 */  public void perforAnim() {    ValueAnimator valAnimator = ObjectAnimator.ofFloat(0, 1);    valAnimator.addUpdateListener(new AnimatorUpdateListener() {      @Override      public void onAnimationUpdate(ValueAnimator animation) {        fraction = (float) animation.getAnimatedValue();        postInvalidate();      }    });    valAnimator.setDuration(duration);    valAnimator.start();  }

5、重寫onMeasure()方法,處理wrap_content情況。

@Override  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {    super.onMeasure(widthMeasureSpec, heightMeasureSpec);    /*     * 處理為wrap_content情況,那么它的specMode是AT_MOST模式,在這種模式下它的寬/高     * 等于spectSize,這種情況下view的spectSize是parentSize,而parentSize是     * 父容器目前可以使用大小,就是父容器當(dāng)前剩余的空間大小, 就相當(dāng)于使用match_parent一樣 的效果,因此我們可以設(shè)置一個(gè)默認(rèn)的值     */    int widthSpectMode = MeasureSpec.getMode(widthMeasureSpec);    int widthSpectSize = MeasureSpec.getSize(widthMeasureSpec);    int heightSpectMode = MeasureSpec.getMode(heightMeasureSpec);    int heightSpectSize = MeasureSpec.getSize(heightMeasureSpec);    if (widthSpectMode == MeasureSpec.AT_MOST        && heightSpectMode == MeasureSpec.AT_MOST) {      setMeasuredDimension(width, height);    } else if (widthSpectMode == MeasureSpec.AT_MOST) {      setMeasuredDimension(width, heightSpectSize);    } else if (heightSpectMode == MeasureSpec.AT_MOST) {      setMeasuredDimension(widthSpectSize, height);    }  }

6、其它的一些方法實(shí)現(xiàn)。

@Override  protected void onLayout(boolean changed, int left, int top, int right,      int bottom) {    super.onLayout(changed, left, top, right, bottom);    if (changed) {      width = right - left;      height = bottom - top;    }  }  /**   * 根據(jù)手機(jī)的分辨率從 dp 的單位 轉(zhuǎn)成為 px(像素)   */  public int dip2px(Context context, float dpValue) {    final float scale = context.getResources().getDisplayMetrics().density;    return (int) (dpValue * scale + 0.5f);  }

7、字段的定義

private final int fillColor = 0xff999999;// 填充顏色 private Paint paint; private int width = 100, height = 300;// 默認(rèn)寬高 /* 兩個(gè)圓心的最大距離 / private int distance = 60; /* 當(dāng)前兩個(gè)圓心的距離 / private float currentDis = 0; private float bigRadius = 20;// 大圓半徑 private float smallRadius = 10;// 小圓半徑 private float controlX1, controlX2, controlY1, controlY2;// 兩個(gè)控制點(diǎn)的坐標(biāo) private float leftX, leftY, rightX, rightY;// 大圓兩邊的兩個(gè)點(diǎn)的坐標(biāo) private float leftX2, leftY2, rightX2, rightY2; // 小圓兩邊的兩個(gè)坐標(biāo) DrawFilter drawFilter; Path path; /* 由屬性動(dòng)畫控制,范圍為0-1 */ float fraction = 0;// 比例值 /* 大圓半徑變化的比例 / private final int bigPercent = 8; /* 小圓半徑變化的比例 / private final int smallPercent = 20; // 動(dòng)畫的執(zhí)行時(shí)間 private long duration = 3000;

三、總結(jié)

一種動(dòng)畫效果,應(yīng)該先分析它的靜態(tài)的實(shí)現(xiàn),然后添加動(dòng)態(tài)的效果,這樣就比較容易實(shí)現(xiàn)它的動(dòng)畫效果了。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
中文字幕日韩视频| 日韩中文字幕观看| 一区二区三区在线播放欧美| 亚洲 欧美综合在线网络| 蜜桃久久av一区| 欧美日韩国产免费观看视频| 欧美日韩亚洲天堂| 在线视频一区二区三区在线播放| 国产欧美日韩在线观看| 在线中文字幕视频| 国产欧美日韩最新| 日韩你懂的电影在线观看| 二区三区中文字幕| 久久夜色精品国产噜噜亚洲av| 91国内在线| 91亚洲国产高清| 精品国产乱码一区二区| 亚洲欧美99| 视频一区二区不卡| 亚洲第一中文字幕在线观看| 中文字幕国产亚洲| 亚洲黄在线观看| 色一区在线观看| 一区二区三区在线免费| 91精品国产自产在线观看永久∴ | av免费网站在线观看| 国产日韩av高清| 欧美日韩在线观看成人| 黄色片网站在线| 中文字幕在线观看亚洲| 国产区在线看| 色www精品视频在线观看| 在线观看91精品国产入口| 91精品视频播放| 中文字幕欧美国内| 国产一区二中文字幕在线看| 欧美熟妇乱码在线一区| 中文国产字幕在线观看| 日韩精品高清不卡| 亚洲热线99精品视频| 久久久久久久久99精品| 伊人www22综合色| 国产高清一级片| 亚洲一区在线观看视频| 一区二区三区在线播放欧美| 美女黄a一级视频| 韩日中文字幕第一页| 91久久精品国产91久久| 日韩在线一区二区视频| 日韩免费视频一区二区| 激情综合色综合久久| 国产资源在线观看| 中文字幕亚洲国产| 91精品国产综合久久香蕉的特点 | 中文字幕欧美人妻精品一区蜜臀| 欧美日韩精品综合在线| 91久久在线| 狠狠色综合色区| 日韩欧美国产视频| 亚洲高清视频一区| 免费国产h视频在线观看86| 影音先锋中文字幕在线观看| 中文字幕欧美日韩精品| 精品国产91乱高清在线观看| 国产一二三视频| 99在线国产| 91吃瓜在线观看| 日韩国产一区| 精品999在线| 亚洲a中文字幕| 久久99精品久久久久子伦| 久久99精品国产| 欧美日韩久久久| 日韩在线 中文字幕| 一区三区二区视频| 日韩精品资源二区在线| 精品国产欧美成人夜夜嗨| 91精品国产日韩91久久久久久| 精品久久久久久综合日本欧美| 国产欧亚日韩视频| 精产国产伦理一二三区| 91精品国产91久久久久久不卡| 国产乱国产乱老熟300部视频| 一区二区三区免费看视频| 国产h片在线观看| 日韩精品视频免费在线观看| 日韩在线精品视频| 欧美日韩国产首页在线观看| 在线视频你懂得一区| 欧洲精品久久久| 亚洲一区在线视频观看| 色综合久久88色综合天天免费| 国产一级在线免费观看| 91精品视频观看| 免费看黄资源大全高清| 日韩欧美在线网址| 日本xxxwww免费视频| 日韩欧美综合视频| 国产日韩在线视频| 亚洲最新永久观看在线| 国产视频1区| 日韩一级二级三级| 精品欧美日韩在线| 欧美国产三级| 伊人国产视频| 日韩精品首页| 最近中文字幕在线中文高清版| 精品欧美日韩在线| 精品在线99| 日韩欧美在线影院| 久久99久久99精品中文字幕| 欧美日韩国产系列| 欧美二区在线观看| 在线国产日本| 精品国产91乱高清在线观看| 久久99蜜桃精品久久久久小说| 99视频在线看| 日韩视频国产视频| 一区二区三区视频网站| 一区视频在线播放| 亚洲成年网站在线观看| 日韩精品在线观| 亚洲 欧美 日韩系列| 久久中文精品| 欧美久久一二三四区| 久久激情一区| 日韩精品丝袜在线| 国产一区日韩| 国产亚洲污的网站| 亚洲一区精品在线| 一级特黄aaa大片在线观看| 中文字幕视频一区二区三区久| 午夜国产视频| 国产在线不卡一区| 中文字幕日韩在线观看| 日韩欧美亚洲国产一区| 日韩精品在线免费观看| 久久精品www| 精品视频—区二区三区免费| 国产激情在线观看| 成人h视频在线观看| 一区二区欧美国产| 久久中文精品| 日韩国产一区三区| 日韩精品欧美| 一级日本免费的| 欧美日韩国产在线播放| 亚洲羞羞网站| 精品成人久久久| 91精品久久久久久久久久入口| 最近中文字幕第一页| 亚洲最新免费视频| 中文字幕国产视频| 日韩精品第一区| 国产黄色在线| 欧美特黄一区| 国产不卡精品在线| 国产99在线 | 亚洲| 欧美日韩视频免费看| 日韩欧美在线综合| a天堂在线资源| 国内国产区免费视频| 国产在线www| 久久在线91| 日韩中文字幕第一页| 欧美一级手机免费观看片| 欧美日韩国产片| 国产欧美第一页| 日韩欧美中文字幕在线观看| 国产在线小视频| 中文字幕欧美在线| 国产视频中文字幕在线观看| 欧美在线观看视频一区| 不卡一二三区| a√免费观看在线网址www| 国产95在线|亚洲| 亚洲a中文字幕| 99国产一区| 国产一二三四| 亚洲国产无线乱码在线观看| 日韩免费看网站| 日本不卡免费高清视频| 午夜一区二区三区| 久久久久久自在自线| 91精品国产全国免费观看| 国产在线第一页| va中文字幕| 亚洲欧美99| 国产欧美在线观看| 91欧美在线视频| 欧美亚洲国产激情| 亚洲а∨精品天堂在线| 欧美另类久久久品| 日韩中文在线字幕| 高清日韩中文字幕| 欧美日韩在线不卡| 亚洲专区一二三| 欧美一级日韩一级| 91精选在线| 91精品在线观看入口| 一区二区不卡在线| 国产无遮挡在线视频免费观看| 国产丝袜一区| 一区二区在线观| 91精品国产综合久久香蕉最新版 | 视频一区日韩| 国产在线黄色| 国产久卡久卡久卡久卡视频精品| 国产一级视频| 成人一区二区不卡免费| 午夜伊人狠狠久久| 日韩三级一区二区| 不卡视频一区二区三区| 国产黄色在线免费观看| 日韩中文字幕在线视频播放| 久久久精品福利| 91精品国产欧美日韩| 91精品视频国产| 国产欧美日韩精品高清二区综合区| 日韩亚洲不卡在线| 欧美日韩国产高清| 中文字幕 亚洲视频| 欧美日韩综合视频网址| 正在播放日韩精品| 国产一区日韩| 一区二区三区精品久久久| 亚洲三级免费看| 国产在线观看a| 中文字幕人成乱码在线观看| 日韩欧美在线中文字幕| 中文字幕一区不卡| 欧美一级搡bbbb搡bbbb| 黄色视屏免费在线观看| 国产精品一区二三区| www中文字幕| 欧美日韩视频免费看| 99日韩精品| av午夜在线| 国产最顶级的黄色片在线免费观看| 日韩精品国产欧美| 色www精品视频在线观看| 欧美日韩成人一区| 国产高清在线一区| 欧美日韩国产综合视频在线观看| 国产永久免费高清在线观看| 精品在线一区二区| 欧美亚洲视频在线看网址| 99综合精品久久| 国产午夜精品久久| 91欧美在线视频| 一区二区三区在线播| 99精品视频99| 欧美日韩国产区| 日韩精品在线观看网站| 亚洲v中文字幕| 久久久精品免费免费| 亚洲 欧美综合在线网络| 91久久大香伊蕉在人线| 日韩区欧美区| 日韩字幕在线观看| 欧美日韩在线视频一区| 欧美日韩国产免费观看视频| 国产无套粉嫩白浆在线2022年| 中文字幕在线观看国产| 久久综合九色欧美综合狠狠| 日韩精品视频在线观看视频| 欧美一级免费观看| 欧美色欧美亚洲高清在线视频| av免费看在线| 亚洲 欧美综合在线网络| 在线资源av| 在线中文字幕视频观看| 一级特黄aaa大片在线观看| 欧美日韩精品在线| 亚洲欧洲日韩在线| 亚洲制服一区| 亚洲狠狠婷婷综合久久久久图片| 日韩精品中文字幕第1页| 欧美sm一区| √天堂资源中文www| 日韩中文字幕网| 亚洲精品中文字幕乱码三区不卡| 久久电影国产免费久久电影| 国产一区高清视频| 91精品国产丝袜白色高跟鞋| 亚洲综合在线视频| 欧美日韩不卡在线视频| 欧美日韩在线播放视频| 欧美日韩在线三级| 日韩欧美中文在线视频| 日韩福利视频导航| 一区视频在线播放| 欧美 日韩 国产 在线| 欧美日韩中文| 在线观看中文字幕一区| 国产一级视频在线播放| 尤物av一区二区| 欧美日本精品| 在线欧美日韩精品| 久久人人88| 午夜伊人狠狠久久| 欧美日韩综合在线| 日韩视频精品在线| 91精品国产入口| 欧美三级日韩在线| 国产一级片在线| 国产一区不卡在线| 亚洲va中文字幕| 欧美日韩国产综合视频在线观看 | 久久99久久久欧美国产| 午夜国产视频 | 欧美黄页在线免费观看| 日韩欧美国产一二三区| 日韩视频在线一区二区三区| 国产欧美久久久久久久久| 日韩在线观看a| 欧美日韩高清| 91久久久久| 国产69精品久久app免费版| 99精品在线播放| 欧美日韩久久久| 国产小视频免费在线观看| 精品在线一区二区| 91精品国产高清| 日韩欧美高清在线视频| 欧美成人二区| 国产激情在线视频| 欧美日韩三级一区| 国产一区久久| 美女黄a一级视频| 91精品国产色综合久久久蜜香臀| 免费在线视频一级不卡| 欧美亚洲国产日韩2020| 亚洲一区导航| 日韩精品视频在线免费观看| 中文字幕 乱码 中文乱码91| 国产成人精品免费久久久久| 日韩中文字幕精品视频| 91精品在线观看视频| 亚洲va韩国va欧美va精品| 亚洲.国产.中文慕字在线| 欧美1234区| 欧美日韩综合高清一区二区| 日韩精品视频网站| 一二三区精品福利视频| 精品视频1区2区3区| 欧美三级日韩三级国产三级| 精品免费视频| 国内精品99| 日韩激情一区| 欧美日韩91| 日韩欧美久久久| 欧美日韩精品国产| 亚洲乱码中文字幕| 亚洲影视资源网| 中文字幕亚洲第一| 欧美日韩中文字幕综合视频| 久久久91精品| 日韩欧美国产成人精品免费| 亚洲免费专区| 欧美xxxx中国| 91精品国产自产在线观看永久∴ | 国产卡1卡2卡三卡在线| 亚洲大胆人体av| 国产调教精品| 亚洲免费中文字幕| av午夜在线| 午夜国产在线视频| 91精品国产91久久久久| 中文字幕综合在线| 日韩专区中文字幕| 亚洲高清在线免费| 久久久精品福利| 欧美中文字幕精品| 国产一区日韩欧美| 中文字幕日韩在线观看| 日韩精品视频在线| 一区二区欧美国产| 欧美日韩亚洲天堂| 国产一级视频在线播放| 日韩免费视频一区二区| 91精品国产91久久久久青草| 中文字幕日韩视频| 精品成人久久av| 不卡在线视频| 不卡视频一区二区| 色综合影院在线| 日韩免费看网站| 亚洲人线精品午夜| 欧美日韩中文在线| 中文字幕精品在线视频| 日韩欧美一级在线播放| 国产视频一区二| 国产丝袜欧美中文另类| 亚洲欧美中文在线视频| 日韩视频精品| 精品国产99久久久久久| 中文字幕亚洲国产| 日韩精品三级| 久久香蕉精品|