亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

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

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

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

效果圖如下:

Android控件,水滴

一、總體思路

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

二、代碼實現(xiàn)

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

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

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

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

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

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

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

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

/*** 執(zhí)行屬性動畫,實現(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è)置一個默認(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、其它的一些方法實現(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)寬高 /* 兩個圓心的最大距離 / private int distance = 60; /* 當(dāng)前兩個圓心的距離 / private float currentDis = 0; private float bigRadius = 20;// 大圓半徑 private float smallRadius = 10;// 小圓半徑 private float controlX1, controlX2, controlY1, controlY2;// 兩個控制點的坐標(biāo) private float leftX, leftY, rightX, rightY;// 大圓兩邊的兩個點的坐標(biāo) private float leftX2, leftY2, rightX2, rightY2; // 小圓兩邊的兩個坐標(biāo) DrawFilter drawFilter; Path path; /* 由屬性動畫控制,范圍為0-1 */ float fraction = 0;// 比例值 /* 大圓半徑變化的比例 / private final int bigPercent = 8; /* 小圓半徑變化的比例 / private final int smallPercent = 20; // 動畫的執(zhí)行時間 private long duration = 3000;

三、總結(jié)

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

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


注:相關(guān)教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
国产精品99无码一区二区| 国产成a人亚洲精| 涩爱av在线播放一区二区| 国产叼嘿网站免费观看不用充会员| 91黄视频在线观看| 久久免费精品国产久精品久久久久| 麻豆网站视频在线观看| 亲子伦视频一区二区三区| 亚洲v日韩v欧美v综合| 国产黄色片在线播放| 狠狠久久亚洲欧美专区| 午夜精品福利一区二区三区蜜桃| 亚洲品质视频自拍网| 最新中文字幕在线观看视频| 亚洲第一网中文字幕| 免费看av不卡| 超黄网站在线观看| 精品国产乱码久久久久久夜甘婷婷| 一二区成人影院电影网| 日韩欧美a级成人黄色| 久久精品中文字幕一区| 天天av天天翘天天综合网色鬼国产| 91精品久久久久久粉嫩| 色噜噜狠狠一区二区三区狼国成人| 欧美精品久久久久久久久老牛影院| 另类小说视频一区二区| 亚洲三区欧美一区国产二区| 天天综合色天天综合色hd| 在线黄色免费网站| 国产亚洲欧美日韩在线一区| 亚洲一区二区三区中文字幕| 亚洲视频国产精品| 久久夜精品香蕉| 性欧美长视频免费观看不卡| 中文字幕色视频| 同性恋视频一区| 欧美黄色a视频| 国外成人在线播放| 久久综合九色综合久久久精品综合| 中午字幕在线观看| 影音先锋在线一区| 亚洲一区二区在线播放| 亚洲欧美中文日韩v在线观看| 激情综合网五月婷婷| 国产精品免费视频一区一| 国产97免费视| 国产精品久免费的黄网站| 日本亚洲精品在线观看| 国产精品成人国产乱| 操人在线观看| 老头吃奶性行交视频| 欧美一区二区三区小说| 伊人久久大香线蕉综合75| 欧美黑人巨大xxxx猛交| 久久精品久久99| 亚洲天堂黄色片| 国产精品久久久久久久午夜| 芬兰videosfree性少妇| 黄色一级片黄色| 欧美中文字幕在线观看视频| aaaaa级少妇高潮大片免费看| 日韩午夜激情免费电影| 欧美日韩一区二区三区四区五区| 国产一区二区三区日韩欧美| 亚洲一区亚洲二区| 美女视频免费精品| 日韩一级中文字幕| 亚洲一区二区av电影| 91极品美女在线| 国产网红女主播精品视频| 欧美日产国产成人免费图片| 男女男精品视频| 亚洲视频一二三四| xfplay每日更新av资源在线| 亚洲人成色77777| 亚洲制服丝袜在线播放| 亚洲老妇色熟女老太| 国产精品一区二区三区四区| 一区二区三区视频网站| 中文字幕第20页| 亚洲午夜在线观看| 亚洲国产精品综合小说图片区| 西野翔中文久久精品字幕| 欧美激情xxxx性bbbb| 亚洲一区 二区| 少妇高潮一区二区三区99小说| 亚洲精品午夜在线观看| 在线精品高清中文字幕| 国产中文在线视频| 动漫一区在线| 蜜桃a∨噜噜一区二区三区| av电影高清在线观看| 91热福利电影| 午夜影院韩国伦理在线| 九九热爱视频精品视频| а√天堂中文在线资源bt在线| 性xxxxfreexxxxx欧美丶| 99精品在线免费视频| 日韩欧美主播在线| 国精产品一区一区三区有限在线| 国产激情精品久久久第一区二区| 黄色一级免费视频| 亚洲免费一区二区| 91亚洲精品乱码久久久久久蜜桃| 成人免费淫片aa视频免费| 日韩一区二区三区观看| 白白操在线视频| 欧美精选午夜久久久乱码6080| 国产 国语对白 露脸| 亚洲性猛交xxxx乱大交| 日韩免费av片| 性欧美大战久久久久久久免费观看| 日批视频免费播放| 久久全国免费久久青青小草| 91精品国产一区二区在线观看| 天天av天天爱| 99re5久久在热线播放| 国产又猛又黄又爽| 九色|91porny| 人妻少妇精品无码专区久久| 国产区精品区| 狠狠狠色丁香婷婷综合久久五月| 亚洲av无日韩毛片久久| 亲爱的老师9免费观看全集电视剧| 欧美日韩人人澡狠狠躁视频| 秋霞久久久久久一区二区| 国产日产精品一区| 日本精品在线观看| 黑人巨大精品欧美一区二区三区| 在线免费观看a级片| 在线欧美日韩国产| 九色在线观看| 国产videos| 在线观看国产精品91| h视频网站在线观看| 欧美日韩精品中文字幕一区二区| 欧美性猛交xxxxx免费看| 日韩午夜在线电影| 国产麻豆一区二区三区精品| www三级免费| 久久精品国产精品青草| 久久久久国产精品午夜一区| 国产一区二区三区不卡视频网站| 天堂网中文字幕| 日韩一区二区三区国产| 国产精品99久久久久久久女警| 激情小说网站亚洲综合网| 大西瓜av在线| 91超碰在线免费观看| 免费不卡亚洲欧美| 天天插天天操天天射| 2019中文亚洲字幕| 亚洲国产经典视频| 国产精品美女久久久久人| 国产精品国模大尺度私拍| 日韩精品三区| 图片专区亚洲欧美另类| 中文字幕精品国产| 久久99热这里只有精品| 国产成a人亚洲精品| 亚洲一卡二卡| 麻豆免费在线观看视频| 日韩精品久久久久久久| 囯产精品久久久久久| 最新国产麻豆精品| 蜜臀av免费一区二区三区| 青青在线免费观看视频| 在线国产伦理一区| 无人在线观看的免费高清视频| 亚洲同性gay激情无套| 四虎国产成人免费观看| 国产在线观看无码免费视频| 国产一区二区三区精品欧美日韩一区二区三区| 免费观看在线色综合| 亚洲乱码中文字幕久久孕妇黑人| 久久久久久亚洲精品| 最近免费中文字幕大全免费版视频| 在线播放国产一区二区三区| 老鸭窝91久久精品色噜噜导演| 捆绑调教一区二区三区| 电影一区二区三区久久免费观看| 免费国产视频| 久久久久人妻精品一区三寸| 97国产精品视频| 国产免费看av| 欧美视频在线播放一区| 国产精品福利电影| 久久综合88中文色鬼| 中文字幕免费在线视频| chinese偷拍一区二区三区| 精品久久久久久久久久| 最新国产乱人伦偷精品免费网站| 成人精品电影在线| **毛片在线网站| 欧美激情一区二区三区免费观看| 成人av电影在线播放| 99pao成人国产永久免费视频| 欧洲成人一区| 亚洲日本久久久午夜精品| 你懂的视频在线观看资源| 欧美成人日本| 成人片免费看| 国产欧美一区二区三区网站| 羞羞答答国产精品www一本| 99re6在线| 91亚洲精品久久久蜜桃借种| 日韩欧美一区二区久久婷婷| 99久久精品免费观看| 九九视频精品在线| 国产精品主播视频| 国产无码精品在线观看| 超碰人人草人人| 中文成人激情娱乐网| 免费在线一区观看| 午夜伦伦电影理论片费看| 欧美日韩免费区域视频在线观看| 三级黄色小视频| 欧美黄色精品| 少妇人妻精品一区二区三区| 国产精品白丝jk白祙| 亚洲美女综合网| 伊大人久久香线焦宗合一75大| 日韩视频一区二区三区四区| 一区二区三区精品在线观看| 亚洲精品一二| 日韩一级免费片| 你懂的视频在线| 狂野欧美激情性xxxx欧美| 成年人av电影| 欧美日韩高清一区二区| 性欧美ⅴideo另类hd| 亚洲高清免费视频| 国产免费视频| 欧美一级日韩免费不卡| 日韩av在线电影网| 国产成人精品一区二区三区在线观看| 波多野结衣一区二区三区在线观看| 在线观看精品自拍私拍| 国产精品黄色影片导航在线观看| 国产成人在线播放| 国产精品一区二区三区高清在线| 中日精品一色哟哟| 成人免费观看49www在线观看| 久久成人小视频| 成人免费淫片免费观看| 少妇一级淫片免费看| 一本色道久久99精品综合| 日韩不卡视频一区二区| 国产在线制服美女| 一区二区三区精品国产| 先锋资源av在线| 韩国精品视频在线观看| 天堂在线看视频| 国产一区二区三区在线播放免费观看| 日韩理论片网站| 成年人国产精品| a黄色在线观看| 日韩精品1区| 欧美激情图片小说| 香蕉网在线视频| 国产嫩草一区二区三区在线观看| 欧美天堂亚洲电影院在线播放| 国产精品污视频| 在线观看亚洲色图| 微拍福利一区二区| 狠狠做六月爱婷婷综合aⅴ| 日本一区二区三区免费观看| 日本在线观看高清完整版| 精品无码国产一区二区三区av| 国产一区二区99| 亚洲精品国产动漫| 中文字幕亚洲欧美一区二区三区| 国产精品毛片无码| 国产ts在线观看| 疯狂欧洲av久久成人av电影| 国产成+人+综合+亚洲欧美| 在线一区视频观看| 精品一区二区中文字幕| 亚洲男女av一区二区| 成人台湾亚洲精品一区二区| 最新欧美色图| 香蕉视频成人在线| 精品久久久久久久久久久久久久久| 国产盗摄女厕一区二区三区| 国产一区 在线播放| 免费人成在线不卡| 欧美做暖暖视频| 在线观看欧美激情| 精品日本高清在线播放| 欧美午夜小视频| 国产欧美综合一区| 色噜噜偷拍精品综合在线| 亚洲av综合色区无码一区爱av| 91丝袜呻吟高潮美腿白嫩在线观看| 视频二区在线| 国产最顶级的黄色片在线免费观看| 高清视频在线观看一区| 欧美激情一区二区三区全黄| 永久免费黄色软件| 久久91精品国产91久久久| 特级西西人体wwwww| 欧美xo影院| 国产日产欧美一区二区三区| 亚洲欧美国产毛片在线| 美女黄色成人网| 天天干天天舔天天操| 国产在线一区二区综合免费视频| 春意影院免费入口| 亚洲小视频在线| 亚洲综合精品国产一区二区三区| 一二三区免费视频| 日本欧美一区二区三区乱码| 成人6969www免费视频| 亚洲免费不卡视频| 国产视频一区不卡| 欧美亚洲日本一区| 亚洲电影欧美电影有声小说| 大黑人交xxx极品hd| 久久亚洲精品石原莉奈| 国产一卡二卡3卡4卡四卡在线| 国产十六处破外女视频| 国产精品久免费的黄网站| 波多野结衣电车| 免费精品99久久国产综合精品应用| 国产一区二区三区视频在线播放| 69国产精品视频免费观看| 日韩精品视频中文字幕| 狠狠躁夜夜躁人人爽天天天天97|