新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Android常用控件之下拉刷新Wifi列表

        Android常用控件之下拉刷新Wifi列表

        作者: 時間:2016-09-12 來源:網絡 收藏

        isRefreshable = false;

        }

        @Override

        public void onScroll(AbsListView arg0, int firstVisiableItem, int arg2,

        int arg3) {

        // TODO Auto-generated method stub

        firstItemIndex = firstVisiableItem;

        }

        @Override

        public void onScrollStateChanged(AbsListView view, int scrollState) {

        // TODO Auto-generated method stub

        }

        public boolean onTouchEvent(MotionEvent event) {

        if (isRefreshable) {

        switch (event.getAction()) {

        case MotionEvent.ACTION_DOWN:

        if (firstItemIndex == 0 !isRecored) {

        isRecored = true;

        startY = (int) event.getY();

        Log.v(TAG, 在down時候記錄當前位置‘);

        }

        break;

        case MotionEvent.ACTION_UP:

        if (state != REFRESHING state != LOADING) {

        if (state == DONE) {

        // 什么都不做

        }

        if (state == PULL_To_REFRESH) {

        state = DONE;

        changeHeaderViewByState();

        Log.v(TAG, 由下拉刷新狀態,到done狀態);

        }

        if (state == RELEASE_To_REFRESH) {

        state = REFRESHING;

        changeHeaderViewByState();

        onRefresh();

        Log.v(TAG, 由松開刷新狀態,到done狀態);

        }

        }

        isRecored = false;

        isBack = false;

        break;

        case MotionEvent.ACTION_MOVE:

        int tempY = (int) event.getY();

        if (!isRecored firstItemIndex == 0) {

        Log.v(TAG, 在move時候記錄下位置);

        isRecored = true;

        startY = tempY;

        }

        if (state != REFRESHING isRecored state != LOADING) {

        // 保證在設置padding的過程中,當前的位置一直是在head,否則如果當列表超出屏幕的話,當在上推的時候,列表會同時進行滾動

        // 可以松手去刷新了

        if (state == RELEASE_To_REFRESH) {

        setSelection(0);

        // 往上推了,推到了屏幕足夠掩蓋head的程度,但是還沒有推到全部掩蓋的地步

        if (((tempY - startY) / RATIO headContentHeight)

        (tempY - startY) > 0) {

        state = PULL_To_REFRESH;

        changeHeaderViewByState();

        Log.v(TAG, 由松開刷新狀態轉變到下拉刷新狀態);

        }

        // 一下子推到頂了

        else if (tempY - startY = 0) {

        state = DONE;

        changeHeaderViewByState();

        Log.v(TAG, 由松開刷新狀態轉變到done狀態);

        }

        // 往下拉了,或者還沒有上推到屏幕頂部掩蓋head的地步

        else {

        // 不用進行特別的操作,只用更新paddingTop的值就行了

        }

        }

        // 還沒有到達顯示松開刷新的時候,DONE或者是PULL_To_REFRESH狀態

        if (state == PULL_To_REFRESH) {

        setSelection(0);

        // 下拉到可以進入RELEASE_TO_REFRESH的狀態

        if ((tempY - startY) / RATIO >= headContentHeight) {

        state = RELEASE_To_REFRESH;

        isBack = true;

        changeHeaderViewByState();

        Log.v(TAG, 由done或者下拉刷新狀態轉變到松開刷新);

        }

        // 上推到頂了

        else if (tempY - startY = 0) {

        state = DONE;

        changeHeaderViewByState();

        Log.v(TAG, 由DOne或者下拉刷新狀態轉變到done狀態);

        }

        }

        // done狀態下

        if (state == DONE) {

        if (tempY - startY > 0) {

        state = PULL_To_REFRESH;

        changeHeaderViewByState();

        }

        }

        // 更新headView的size

        if (state == PULL_To_REFRESH) {

        headView.setPadding(0, -1 * headContentHeight

        + (tempY - startY) / RATIO, 0, 0);

        }

        // 更新headView的paddingTop

        if (state == RELEASE_To_REFRESH) {

        headView.setPadding(0, (tempY - startY) / RATIO

        - headContentHeight, 0, 0);

        }

        }

        break;

        }

        }

        return super.onTouchEvent(event);

        }

        /**

        * 當狀態改變時候,調用該方法,以更新界面

        */

        private void changeHeaderViewByState() {

        switch (state) {

        case RELEASE_To_REFRESH:

        arrowImageView.setVisibility(View.VISIBLE);

        progressBar.setVisibility(View.GONE);

        tipsTextview.setVisibility(View.VISIBLE);

        lastUpdatedTextView.setVisibility(View.VISIBLE);

        arrowImageView.clearAnimation();

        arrowImageView.startAnimation(animation);

        tipsTextview.setText(松開刷新);

        Log.v(TAG, 當前狀態,松開刷新);

        break;

        case PULL_To_REFRESH:

        progressBar.setVisibility(View.GONE);

        tipsTextview.setVisibility(View.VISIBLE);

        lastUpdatedTextView.setVisibility(View.VISIBLE);

        arrowImageView.clearAnimation();

        arrowImageView.setVisibility(View.VISIBLE);

        // 是由RELEASE_To_REFRESH狀態轉變來的

        if (isBack) {

        isBack = false;

        arrowImageView.clearAnimation();

        arrowImageView.startAnimation(reverseAnimation);

        tipsTextview.setText(下拉刷新);

        } else {

        tipsTextview.setText(下拉刷新);

        }

        Log.v(TAG, 當前狀態,下拉刷新);

        break;

        case REFRESHING:



        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 麻栗坡县| 景洪市| 满城县| 云林县| 新津县| 个旧市| 萨迦县| 富宁县| 镇宁| 灵寿县| 固镇县| 襄城县| 达日县| 临朐县| 清丰县| 淮南市| 莲花县| 陇西县| 定西市| 中江县| 嘉禾县| 新余市| 襄垣县| 城口县| 洞口县| 河间市| 雷州市| 汤原县| 洛扎县| 武义县| 渭源县| 二连浩特市| 吴忠市| 谷城县| 日土县| 宜兰市| 大同县| 航空| 肥乡县| 崇明县| 德惠市|