判斷listview是上滑還是下滑的方法

來源:互聯網
上載者:User

標籤:

方法一:

用setOnScrollListener(new AbsListView.OnScrollListener())來實現,判斷滑動後顯示的第一個條目 ,與滑動前的第一個條目的大小來判斷,

這種方法邏輯簡單,但是必須要滑動到當前第一條目隱藏後才能起作用,當listview的單個條目的高度很大時,這種方法就不好使了。代碼如下:

lv_shiti_content.setOnScrollListener(new AbsListView.OnScrollListener() {            boolean scrollFlag=false;//標記是否滑動            boolean isFirst=true;//標記第一次進入,因為第一次進來lastVisibleItemPosition預設為0,            // 此時如果listview的第一個顯示的條目不是第一個(下表為0),則往下滑也會出現firstVisibleItem>lastVisibleItemPosition的情況            //所以第一次進入時不做操作,第二次進來已經給lastVisibleItemPosition賦值,就可以判斷了            int lastVisibleItemPosition;//標記上次的顯示位置            @Override            public void onScrollStateChanged(AbsListView view, int scrollState) {                if(scrollState==1||scrollState==2){                    //其中1 表示滑動,等同於 AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL                    // 2 表示慣性滑動  等同於 AbsListView.OnScrollListener.SCROLL_STATE_FLING                    scrollFlag=true;                }else{                    scrollFlag=false;                }            }            @Override            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {                if(!isFirst){                if(firstVisibleItem>lastVisibleItemPosition){                    //執行向上滑動時要做的邏輯                }                lastVisibleItemPosition=firstVisibleItem;//記錄當前條目                    isFirst=false;                }            }        });

方法二:

使用setOnTouchListener(new View.OnTouchListener()方法,這種方法,只要有一點移動距離就可以判斷。

特別說明:android控制項的事件傳遞時是預設直接傳遞到最裡層,只有在上下滑動的時候才會中斷事件,所以我們擷取到的第一個事件是move事件。

而我們的邏輯也是在move事件中做的,這就造成擷取的lasty和movey的值是相同的(看下面代碼)

所以我們要判斷,只有第一次進來的時候擷取lasty。以後都是lasty直接記錄當前的movey。不然每次的lasty和movey永遠是相同的值。

lv_shiti_content.setOnTouchListener(new View.OnTouchListener() {            @Override            public boolean onTouch(View v, MotionEvent event) {                if(isFirstClick){//只有第一次進來的時候用擷取位置的方法給lastY賦值,後面的值都是上一次的move座標                    //如果不做此判斷,每次的lasty和movey是相同的值,這是因為在此處擷取的的y值其實就是move的值,                    //是因為在listview中,down事件是預設傳遞進去給條目的,在此處無法響應down事件。                   lastY=event.getY();                    isFirstClick=false;                }                switch (event.getAction()){                    case MotionEvent.ACTION_MOVE:                        float moveY = event.getY();                        Log.e("moveY_START",moveY+"");                        if(moveY< lastY){                            if(!NewPageisOpen){                                Intent intent = new Intent(getActivity(), ShitidianTestActivity.class);                                startActivity(intent);                                NewPageisOpen = true;                            }                        }                        lastY=moveY;                        break;                }                return false;            }        });

 

判斷listview是上滑還是下滑的方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.