1. 程式人生 > >Android仿美團訂單懸浮view

Android仿美團訂單懸浮view

前言

又是清明雨上,折菊寄到你身旁,把你最愛的歌來輕輕唱。

簡介

今天訂餐無意中看到美團外賣有個顯示訂單進度的view,效果還不錯,便隨手寫了下。

效果圖

實現

這裡我們是繼承LinearLayout來實現的。

一 重寫onMeasure()

定義父view的寬高與子view的寬高相同。

 @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        int
viewWidth = mView.getMeasuredWidth(); int viewHeight = mView.getMeasuredHeight(); int widthMode = MeasureSpec.getMode(widthMeasureSpec); int widthSize = MeasureSpec.getSize(widthMeasureSpec); int heightMode = MeasureSpec.getMode(heightMeasureSpec); int heightSize = MeasureSpec.getSize(heightMeasureSpec); if
(widthMode == MeasureSpec.AT_MOST) { widthSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, viewWidth, getResources().getDisplayMetrics()); } if (heightMode == MeasureSpec.AT_MOST) { heightSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, viewHeight, getResources().getDisplayMetrics()); } setMeasuredDimension(widthSize, heightSize); }

二 獲取父view的寬高

@Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        super.onLayout(changed, l, t, r, b);
        mWidth = getWidth();
        mHeight = getHeight();
    }

三 位移動畫

    /**
     * view位移動畫
     */
    private void initTranslateAnimation() {
        int closeDistance = mWidth - mIconImageView.getWidth() - mView.getPaddingLeft() * 2;
        mTranslateAnimator = ValueAnimator.ofInt(0, closeDistance);
        /*
        當一開始為關閉狀態時,給動畫設定evaluator,使得動畫開始位置為closeDistance
         */
        if (mViewState == ViewStateEnum.CLOSE) {
            mTranslateAnimator.setEvaluator(new TypeEvaluator<Integer>() {
                @Override
                public Integer evaluate(float fraction, Integer startValue, Integer endValue) {
                    return (int) (endValue - fraction * (endValue - startValue));
                }
            });
        }
        mTranslateAnimator.setDuration(ANIMATION_TIME);
        mTranslateAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
        mTranslateAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                int value = (int) animation.getAnimatedValue();
                /*
                相對於父view的位置座標
                 */
                mView.layout(value, 0, mWidth, mHeight);
            }
        });
    }

四 縮放動畫

這裡點選時x號是有個縮放動畫的,可能gif圖不是太明顯。

    /**
     * 點選x號縮放動畫
     */
    private void initScaleAnimation() {
        mScaleAnimator = ValueAnimator.ofFloat(1.0f, 0.0f);
        mScaleAnimator.setDuration(SCALE_ANIMATION_TIME);
        if (mViewState == ViewStateEnum.CLOSE) {
            mScaleAnimator.setEvaluator(new TypeEvaluator<Float>() {
                @Override
                public Float evaluate(float fraction, Float startValue, Float endValue) {
                    return endValue - fraction * (endValue - startValue);
                }
            });
        }
        mScaleAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                float value = (float) animation.getAnimatedValue();
                mCloseImageView.setScaleX(value);
                mCloseImageView.setScaleY(value);
            }
        });
    }

五 開始動畫

    /**
     * 使用AnimatorSet讓兩個動畫同時播放
     */
    private void doAnimation() {
        initTranslateAnimation();
        initScaleAnimation();
        AnimatorSet set = new AnimatorSet();
        set.play(mTranslateAnimator).with(mScaleAnimator);
        set.start();
    }

總結

本篇博文主要知識點還是動畫,包括對ValueAnimator的基本使用,還有自定義Evaluator,希望大家通過本篇博文能夠有所收穫。另外我們也只是大概寫了下實現的一些主要程式碼,所以有需要原始碼的童鞋可以去github下載。

原始碼下載

相關推薦

Android仿訂單懸浮view

前言 又是清明雨上,折菊寄到你身旁,把你最愛的歌來輕輕唱。 簡介 今天訂餐無意中看到美團外賣有個顯示訂單進度的view,效果還不錯,便隨手寫了下。 效果圖 實現 這裡我們是繼承LinearLayout來實現的。 一 重寫onMeasur

Android 仿懸浮購物車顯示隱藏

效果圖: 這是美團的效果 通過效果圖可以看到 靜止的時候是購物車圖示是顯示的,滑動的時候是隱藏一半並半透明顯示的。 這裡用到一個觸控反饋的方法dispatchTouchEvent MotionEvent.ACTION_DOWN://手指按下 Mot

Android 仿網,大眾點評購買框懸浮效果之修改版

我之前寫了一篇關於美團網,大眾點評的購買框效果的文章Android對ScrollView滾動監聽,實現美團、大眾點評的購買懸浮效果,我自己感覺效果並不是很好,如果快速滑動介面,顯示懸浮框的時候會出現一卡的現象,有些朋友說有時候會出現兩個佈局的情況,特別是對ScrollView

Android 仿網,大眾點評購買框懸浮效果,仿詳情頁,可下拉放大圖片,向上滾動圖片,鬆手有動畫

先看效果圖 直接上程式碼註釋都寫到程式碼裡面了: 自定義的ScrollView package mm.shandong.com.testmtxqcomplex.myui; import android.content.Context; import andro

Android仿外賣點菜聯動列表

Android高仿美團外賣點菜聯動列表效果 最近專案中有一個新增購物車的需求,需要做成美團外賣點菜聯動ListView的效果,可能有的朋友覺得這很簡單,不就是2個Listview點選事件聯動處理機制嗎?沒錯,基本思路就是這樣子,只是美團外賣點菜效果上有一種根據

Android 仿選擇城市、微信通訊錄、餓了麼點餐列表的導航懸停分組索引列表

SuspensionIndexBar簡介:快速實現分組懸停、右側索引導航聯動 列表。如 美團選擇城市介面,微信通訊錄介面、餓了麼點餐介面等。SuspensionIndexBar相關博文:喜歡隨手點個star 多謝在哪裡找到我:我的github:我的CSDN部落格:我的稀土掘金

Android 仿網,探索ListView的A-Z字母排序功能實現選擇城市

記得在我剛開始接觸到美團網的時候就對美團網這個城市定位、選擇城市功能很感興趣,覺得它做得很棒。有如下幾個點: 一:實現ListView的A-Z字母排序功能 二:根據輸入框的輸入值改變來過濾搜尋結果,如果輸入框裡面的值為空,更新為原來的列表,否則為過濾資料列表

android 仿、大眾點評滑動viewpager選單欄

部分圖片沒有找到,就隨便替代了一下,功能上面和美團類似,各位需要的可以在下載試試。 由於csdn上傳不了,改用git上傳在gitub上面。 git下載地址:https://github.com/Mfangming/Meituan.git MainAct

Android仿載入資料、小人奔跑進度動畫對話方塊(附順豐快遞員奔跑效果)

我們都知道在Android中,常見的動畫模式有兩種:一種是幀動畫(Frame Animation),一種是補間動畫(Tween Animation)。幀動畫是提供了一種逐幀播放圖片的動畫方式,播放事先做好的影象,與gif圖片原理類似,就像是在放電影一樣。補間動畫可以實現View元件的移動、放大、縮小以及漸

Android仿地址選擇

最近做了這個功能,分享一下,用的是百度地圖api,和美團外賣的地址選擇介面差不多,也就是可以搜尋或者滑動地圖展示地址列表給使用者選擇,看下效果圖先。                文章重點 1、展示地圖並定位到“我”的位置2、滑動

Android從零擼(二) - 仿下拉重新整理自定義動畫

這是【從零擼美團】系列文章第二篇。 專案地址:github.com/cachecats/L… 今天寫了下拉重新整理,框架用的是 SmartRefreshLayout ,不為啥,因為 Github 上它有 9.5k 個 star,中文支援好節省時間。 先上圖: 一、分析 美團的下拉載入動

android 動畫--幀動畫--仿載入中小人

1 把資源圖片放到drawable中 2 在drawable中寫動畫的xml檔案animation01 Animation01.xml <?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:a

Android 利用ViewPager+GridView,仿首頁導航欄分類佈局介面

先看美團的效果: 再看我們山寨的效果: 最初我是使用VIewPager+RecyclerVIew實現的,發現在左右滑動的時候,有問題,經常滑動不了,應該是RecyclerVIew消費了Touch事件,所以棄用這個方法了(效果圖是下面的效果,為了區別VIew頁面,每

Android】快速實現仿選擇城市介面,微信通訊錄介面

概述 本文是這個系列的第三篇,不出意外也是終結篇。因為使用經過重構後的控制元件已經可以快速實現市面上帶 索引導航、懸停分組的列表介面了。 在前兩篇裡,我們從0開始,一步一步實現了仿微信通訊錄、餓了麼選餐介面。 (第一篇戳我 第二篇戳我) 這篇文章作為終結

Android仿載入資料幀動畫

-----------------轉載請註明出處:http://blog.csdn.net/android_cll 一:先來張效果圖(這裡是GIF動畫,我就截圖的所有沒有動畫,實際是動的): 二:

仿簡訊驗證碼輸入框 + 自定義軟鍵盤

KeyboardDemo 自定義簡訊驗證碼輸入框  + 自定義數字字母軟鍵盤 前段時間做了一個需求,類似驗證碼輸入框,但輸入的優惠碼有數字和大小寫字母,所以就需要用到自定義軟鍵盤,不然總是切換數字與字母太麻煩,使用者體驗不佳。 剛開始想著到網上找一些demo得了,可i

fragment實現仿下拉篩選功能

1、前言 在開發APP中,大家基本都會用到篩選功能,而美團、房天下、淘寶等都會有一個下拉篩選功能,其實實現起來並不是很難,先上圖看一看,樣式可能不太好看,還請見諒。頁面篩選時有動畫效果。 2、思路總結和原始碼 (1)首先是一個xml頁面,整體思路就是上方按鈕正常佈局,下方通過f

仿 /餓了嗎 搜尋框點選效果

就是如下這種總效果: 點選搜尋框(上圖)- 出現帶熱門搜尋、歷史搜尋的頁(下圖)   解決: 1.搜尋框input加 @focus="this.$router.push('/search')" 路由跳轉新頁面 2.新頁面鉤子函式 created()

SmartRefreshLayout 仿下拉重新整理

先上圖: 一、分析 美團的下拉載入動畫初看挺簡單的,就一個賣萌的小人。細看的話還稍微有點複雜,一共有三個狀態。 剛開始下拉的時候,小腦袋從小變大的過程。 下拉到一定程度但還沒鬆手,小人翻了個跟頭直到完全出現。再往下拉保持最後完全出現的狀態。 鬆開後左右搖

Android仿微信文章懸浮窗效果

序言 前些日子跟朋友聊天,朋友Z果粉,前些天更新了微信,說微信出了個好方便的功能啊,我問是啥功能啊,看看我大Android有沒有,他說現在閱讀公眾號文章如果有人給你發微信你可以把這篇文章當作懸浮窗懸浮起來,方便你聊完天不用找繼續閱讀,聽完是不是覺得這叫啥啊,我大