Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android 自定義仿IOS上拉菜單實現

Android 自定義仿IOS上拉菜單實現

編輯:關於Android編程

最近在做一個歪果仁給我外包的項目,主頁需要做一個類似於IOS那種上拉菜單的功能,於是一時間試了各種方法,什麼Spinner、Drawlayout,SlidingMenu等等等等,都搞不了,後面實在被逼無奈自己寫了一個上拉菜單控件,居然還能湊合著用!

姑且可以叫他MyPullUpMenu! 有時間我會封裝一下發到GitHub。

效果圖如下:

\

實現的功能有仨:

1、上拉位置未超過一定距離時,松開自動往下滾動。

2、上拉位置超過一定距離時,松開自動網上滾動直至菜單全展開。

3、菜單滾動到頂部並停止滾動時,點擊按鈕菜單自動回滾到底部

 

實現步驟:

1.首先寫MyPullUpMenu的xml界面:

 

    

        

        

            

            

            

            

            

            

            

            

            

            

            

        
效果圖:

 

\

 

2.邏輯功能實現:

首先,需要在加載的過程中將這個布局文件移動到底部:

 

main_textmenulayout.setY(screenHeight - 30 * scale);
這裡的screenHeight是屏幕高度,30是按鈕高度,scale是屏幕像素密度比。

 

接著,需要得到整個空間的高度main_textmenulayout_HEIGHT:

 

main_textmenulayout_HEIGHT = 40 * scale * 11 + 30 * scale;
這裡也可以改成得到整個空間高度之後再乘以縮放比進行縮放,我這樣寫是很不科學的,違反了可重用性QAQ。

 

之後再到按鈕的onTouch裡進行觸摸事件判斷就可以了:

 

        main_dropdownbtn.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                Y = (int) event.getRawY();
                ObjectAnimator animator;
                switch (event.getAction()) {
                    case MotionEvent.ACTION_MOVE:
                        if ((Y <= (screenHeight - 30 * scale)) && (Y >= screenHeight - main_textmenulayout_HEIGHT  )) {
                            main_textmenulayout.setY(Y);
                        }
                        break;
                    case MotionEvent.ACTION_UP:
                        if (Y <= (screenHeight - main_textmenulayout_HEIGHT + 30 * scale)) {
                            break;
                        }

                        int Yposition = (int) (screenHeight - main_textmenulayout_HEIGHT / 2);
                        if (Y <= Yposition) {
                            animator = ObjectAnimator.ofFloat(main_textmenulayout, "translationY", screenHeight - main_textmenulayout_HEIGHT);
                        } else {
                            animator = ObjectAnimator.ofFloat(main_textmenulayout, "translationY", screenHeight - 30 * scale);
                        }
                        animator.setDuration(300);
                        animator.start();
                        break;

                }
                return false;
            }
        });
最後,還有按鈕的點擊下滑事件,需要在該按鈕的onClickListener中的onClick方法中定義:

 

ObjectAnimator animator = ObjectAnimator.ofFloat(main_textmenulayout, "translationY", screenHeight - 30 * scale);
animator.setDuration(300);
animator.start();


因為是商業外包項目,源碼就不提供了,就這樣,需要的可以私聊我。
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved