PopupWindow實現仿iOS QQ音樂上拉功能表列(支援手勢以及點擊操作)

來源:互聯網
上載者:User

標籤:

轉載請註明出處:王亟亟的大牛之路

能力OK的小夥伴可以不看N2,源碼在最下面

今天早上一個Andorid群的小夥伴問了我一些PopupWindow的問題,正好昨天晚上我注意到QQ音樂的一個功能表列,那麼今天就按照那個實現做一下(UI瞎湊合的你懂的)

先上下原圖:

再貼一下我們的效果(除了長得不像也沒什麼,哈哈哈):

功能實現:

1:底部PopupWindow呈現

2:手勢動作操作控制項

3:按鈕操作控制項

4:控制項內部的點擊事件

How to do?

分析:

首先這是一個標準的底部的PopupWindow,pop(之後都這麼簡寫了)內部有2排,每一排都有一系列按鈕,
每一個按鈕都有它的點擊事件,pop支援手勢顯示or隱藏,這一系列就是我們要做的事,讓我們帶著需求來看代碼。

包結構:

這次沒像以前,寫一個Demo我導了一堆包,這次就用了Log的庫:

Gradle:

 compile ‘com.apkfuns.logutils:library:1.0.6‘

實作類別就一個public class HomeActivity extends Root implements View.OnClickListener, View.OnTouchListener

例子裡有一大堆的findID的東西,其實可以用註解來做這些事,可以參考http://blog.csdn.net/ddwhan0123/article/details/47399259

OnClickListener來解決我們所有的點擊事件,從按鈕到pop中的小表徵圖

OnTouchListener來解決我們滑動操作的業務,隱藏/顯示 pop用

具體滑動隱藏/顯示的方法:
moveY 是一個滑動距離判斷值,定義多場多端你自己決定吧
MotionEvent.ACTION_DOWN 觸摸到螢幕的那一刻 記錄一個座標。
MotionEvent.ACTION_UP 手指離開時的座標,然後?

加加減減就出結果了,是不是So easy?

   @Override    public boolean onTouch(View v, MotionEvent event) {        switch (event.getAction()) {            case MotionEvent.ACTION_DOWN:                y=event.getY();                LogUtils.d("--->HomeActivity onTouch  y=event.getY() "+y);                break;            case MotionEvent.ACTION_MOVE:                break;            case MotionEvent.ACTION_UP:                float tempY=event.getY();                LogUtils.d("--->HomeActivity onTouch  tempY=event.getY() "+tempY);                //從下往上滑                if(y-tempY<moveY){                    dissmissPop();                    //從上往下滑                }else if(y-tempY>moveY){                    popupWindow.showAtLocation(v, Gravity.BOTTOM, 0, 0);                }                break;        }        return true;    }
來點下一些基礎知識點(N2)

1.如何控制pop的位置?

popupWindow.showAtLocation();

如果只是設定在空間的下面只需要

popupWindow.showAsDropDown(控制項);

左邊:

popupWindow.showAtLocation(v, Gravity.NO_GRAVITY, location[0]-popupWindow.getWidth(), location[1]);

右邊:

popupWindow.showAtLocation(v, Gravity.NO_GRAVITY, location[0]+v.getWidth(), location[1]);  

2.pop中,所有小控制項都是遵循於style="@style/popTheme",那這部分又是如何操作的?

Style!!

Style是針對表單元素層級的,改變指定控制項或者Layout的樣式。

那再說下Theme:
Theme是針對表單層級的,改變表單樣式

2.1 HOW to use Style?

1.在res/values 目錄下建立一個名叫style.xml的檔案。增加一個<resources>根節點。
2.對每一個風格和主題,給<style>element增加一個全域唯一的名字,也可以選擇增加一個父類屬性。在後邊我們可以用這個名字來應用風格,而父類屬性標識了當前風格是繼承於哪個風格。
3.在<style>元素內部,申明一個或者多個<item>,每一個<item>定義了一個名字屬性,並且在元素內部定義了這個風格的值。
4.你可以應用在其他XML定義的資源。

源碼地址:https://github.com/ddwhan0123/BlogSample/tree/master/PopupWindowDemo

記得點個贊哦!!

PopupWindow實現仿iOS QQ音樂上拉功能表列(支援手勢以及點擊操作)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.