FloatingView 來(lái)啦涌哲,快來(lái)玩一玩

FloatingView 可以說(shuō)是 FloatingText 的升級(jí)版胖缤,前段時(shí)間開(kāi)發(fā)的 FloatingText 目前已經(jīng)有 551個(gè) star,FloatingText 的設(shè)計(jì)初衷是一個(gè)能讓文本執(zhí)行漂亮的漂浮動(dòng)畫阀圾。然后有朋友提 issue 討論是不是可以讓 ImageView 執(zhí)行漂浮動(dòng)畫哪廓,或者漂浮別的 View,這個(gè) Idea 非常不錯(cuò)初烘,所以這就誕生了FloatingView

<img width="288" height="512" src="http://upload-images.jianshu.io/upload_images/1721932-0b8648ab17ce73c1.gif?imageMogr2/auto-orient/strip" />

廢話不多說(shuō)撩独,快來(lái)看看怎么用吧

一.使用

Step 1

在 build.gradle 文件中添加庫(kù)依賴

    dependencies {  
        compile 'com.ufreedom.uikit:FloatingViewLib:1.0.2'
    }

Step 2

使用 FloatingBuilder 創(chuàng)建一個(gè) FloatingElement

FloatingElement builder = new FloatingBuilder()
                            .anchorView(View)
                            .targetView(View)
                            .offsetX(int)
                            .offsetY(int)
                            .floatingTransition(FloatingTransition)
                            .build();

使用 FloatingBuilder 可以設(shè)置的有

  • anchorView :錨點(diǎn),也就是你想在哪個(gè) View 上面進(jìn)行漂浮動(dòng)畫
  • target:目標(biāo)账月,你想漂浮的 View
  • offsetX:x 方向的偏移量,單位 px
  • offsetY: y 方向的偏移量澳迫,單位 px
  • floatingTransition : 漂浮效果局齿,默認(rèn)是 ScaleFloatingTransition,也可以自己實(shí)現(xiàn)漂浮效果

Step 3

創(chuàng)建一個(gè) FloatingView 作為 FloatingElement 的容器,然后讓你的 View 飛起來(lái)

    Floating floating = new Floating(getActivity());
    floating.startFloating(builder);

二.自定義

1.坐標(biāo)系

2.類圖

3.漂浮動(dòng)畫

實(shí)現(xiàn)漂浮動(dòng)畫很簡(jiǎn)單橄登,你只需要實(shí)現(xiàn) FloatingTransition 接口就可以:


    public interface FloatingTransition {
        public void applyFloating(YumFloating yumFloating);
    }

applyFloating 方法抓歼,你可以使用 Android Animation 創(chuàng)建動(dòng)畫,然后使用 YumFloating 進(jìn)行 Alpha,Scale,Translate,Rotate 等變換

如果你想加入 Facebook Rebound 回彈動(dòng)畫效果拢锹,你可以使用 SpringHelper,例如 ScaleFloatingTransition:

    public class ScaleFloatingTransition implements FloatingTransition {

    ...
    
    @Override
    public void applyFloating(final YumFloating yumFloating) {
        
        ValueAnimator alphaAnimator = ObjectAnimator.ofFloat(1.0f, 0.0f);
        alphaAnimator.setDuration(duration);
        alphaAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
                yumFloating.setAlpha((Float) valueAnimator.getAnimatedValue());
            }
        });
        alphaAnimator.start();

        SpringHelper.createWidthBouncinessAndSpeed(0.0f, 1.0f,bounciness, speed)
                .reboundListener(new SimpleReboundListener(){
                    @Override
                    public void onReboundUpdate(double currentValue) {
                        yumFloating.setScaleX((float) currentValue);
                        yumFloating.setScaleY((float) currentValue);
                    }
                }).start(yumFloating);
    }
    
}


如果 SpringHelper 無(wú)法滿足你的需求谣妻,你可以直接使用 YumFloatingcreateSpringByBouncinessAndSpeed(double bounciness, double speed) 或者
createSpringByTensionAndFriction(double tension, double friction) 創(chuàng)建 Spring, 然后使用 transition(double progress, float startValue, float endValue) 進(jìn)行數(shù)值轉(zhuǎn)換

4.路徑漂浮動(dòng)畫

實(shí)現(xiàn)路徑漂浮同樣很簡(jiǎn)單,例如 CurveFloatingPathTransition ,首先你需要繼承 BaseFloatingPathTransition 類.和繼承 FloatingTransition 類不同的是卒稳,你需要再實(shí)現(xiàn)一個(gè) getFloatingPath() 方法.
getFloatingPath() 方法內(nèi)使用 Path 創(chuàng)建你想漂浮的路徑蹋半,然后調(diào)用 FloatingPath.create(path, false) 進(jìn)行返回. 例如 CurveFloatingPathTransition 實(shí)現(xiàn):

    public class CurveFloatingPathTransition extends BaseFloatingPathTransition {

        ...
      
        @Override
        public FloatingPath getFloatingPath() {
            if (path == null){
                path = new Path();
                path.moveTo(0, 0);
                path.quadTo(-100, -200, 0, -300);
                path.quadTo(200, -400, 0, -500);
            }
            return FloatingPath.create(path, false);
        }

        @Override
        public void applyFloating(final YumFloating yumFloating) {
            ValueAnimator translateAnimator;
            ValueAnimator alphaAnimator;
    
            
            translateAnimator = ObjectAnimator.ofFloat(getStartPathPosition(), getEndPathPosition());
            translateAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator valueAnimator) {
                    float value = (float) valueAnimator.getAnimatedValue();
                    PathPosition floatingPosition = getFloatingPosition(value);
                    yumFloating.setTranslationX(floatingPosition.x);
                    yumFloating.setTranslationY(floatingPosition.y);
    
                }
            });
               
           ...
        }
    
}

使用 Path 將你想要漂浮的路徑的描繪出來(lái),然后在 applyFloating(final YumFloating yumFloating) 方法中:

  • 使用 getStartPathPosition() 方法獲取路徑的開(kāi)始位置
  • 使用 getEndPathPosition()方法獲取路徑的結(jié)束位置
  • 使用 getFloatingPosition(float progress) 獲取當(dāng)前進(jìn)度的位置

getFloatingPosition(float progress) 方法會(huì)返回一個(gè) PathPosition 對(duì)象充坑,其屬性 x,y 分別代表當(dāng)前路徑動(dòng)畫的 x 坐標(biāo)减江,和 y 坐標(biāo).

設(shè)計(jì)思想

對(duì)于開(kāi)源庫(kù)來(lái)說(shuō)染突,易用,擴(kuò)展性強(qiáng)辈灼,非常重要份企, FloatingView 正在努力朝這方面發(fā)展

結(jié)束語(yǔ)

  • 如果你覺(jué)得 FloatingView 還不錯(cuò)的,請(qǐng)給我一個(gè) star ??
  • 任何意見(jiàn)或建議歡迎給我提 issue 或者 PR

最后奉上一個(gè)非常 nice 的 gif 動(dòng)畫

<img width="320" height="240" src="http://upload-images.jianshu.io/upload_images/1721932-be7e9bb67087939f.gif?imageMogr2/auto-orient/strip" />

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末巡莹,一起剝皮案震驚了整個(gè)濱河市司志,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌降宅,老刑警劉巖骂远,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異钉鸯,居然都是意外死亡吧史,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門唠雕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)贸营,“玉大人,你說(shuō)我怎么就攤上這事岩睁〕” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵捕儒,是天一觀的道長(zhǎng)冰啃。 經(jīng)常有香客問(wèn)我,道長(zhǎng)刘莹,這世上最難降的妖魔是什么阎毅? 我笑而不...
    開(kāi)封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮点弯,結(jié)果婚禮上扇调,老公的妹妹穿的比我還像新娘。我一直安慰自己抢肛,他們只是感情好狼钮,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著捡絮,像睡著了一般熬芜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上福稳,一...
    開(kāi)封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天涎拉,我揣著相機(jī)與錄音,去河邊找鬼。 笑死曼库,一個(gè)胖子當(dāng)著我的面吹牛区岗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播毁枯,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼慈缔,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了种玛?” 一聲冷哼從身側(cè)響起藐鹤,我...
    開(kāi)封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赂韵,沒(méi)想到半個(gè)月后娱节,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡祭示,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年肄满,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片质涛。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡稠歉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出汇陆,到底是詐尸還是另有隱情怒炸,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布毡代,位于F島的核電站阅羹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏教寂。R本人自食惡果不足惜捏鱼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望酪耕。 院中可真熱鬧穷躁,春花似錦、人聲如沸因妇。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)婚被。三九已至,卻和暖如春梳虽,著一層夾襖步出監(jiān)牢的瞬間址芯,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谷炸,地道東北人北专。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像旬陡,于是被迫代替她去往敵國(guó)和親拓颓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,742評(píng)論 25 707
  • 在iOS中隨處都可以看到絢麗的動(dòng)畫效果描孟,實(shí)現(xiàn)這些動(dòng)畫的過(guò)程并不復(fù)雜驶睦,今天將帶大家一窺iOS動(dòng)畫全貌。在這里你可以看...
    F麥子閱讀 5,101評(píng)論 5 13
  • 內(nèi)容抽屜菜單ListViewWebViewSwitchButton按鈕點(diǎn)贊按鈕進(jìn)度條TabLayout圖標(biāo)下拉刷新...
    皇小弟閱讀 46,721評(píng)論 22 665
  • iOS中有哪幾種儲(chǔ)存數(shù)據(jù)的方式1匿醒、XML屬性列表(plist)歸檔2场航、Preference(偏好設(shè)置)–本質(zhì)還是通...
    愛(ài)吃蘿卜的小蘑菇閱讀 190評(píng)論 0 0
  • 在開(kāi)發(fā)的過(guò)程中呢,我們都多少會(huì)想快速的去做一些操作廉羔,那么我們就需要用到快捷鍵溉痢。那今天呢,我給大家分享一些我自己比較...
    陳子御閱讀 274評(píng)論 0 0