zoukankan      html  css  js  c++  java
  • listView使用小技巧P66--P76

    1.设置分割线高度和颜色

     android:divider="@android:color/darker_gray"
     android:dividerHeight="10dp" 

    2.隐藏滚动条

            android:scrollbars="none"

    3.取消点击效果(5.x以上是波纹)

    android:listSelector="@android:color/transparent"

    4.设置listView需要显示在第几页

          //N代表第N个item
            mListView.setSelection(N);
            //平滑效果
            mListView.smoothScrollToPosition(index);
            mListView.smoothScrollBy(distance,duration);
            mListView.smoothScrollByOffset(offset);    

    5.遍历所有item

     for(int i=0;i<mListView.getChildCount();i++){
                View view=mListView.getChildAt(i);
            }

    6.设置空空数据显示提示

           mListView.setEmptyView(view);

    7.listView滑动监听

      ①、onTonchListener

     mListView.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View view, MotionEvent motionEvent) {
    
                    switch (motionEvent.getAction()) {
                        case MotionEvent.ACTION_DOWN:
                            //触摸时操作
                            break;
                        case MotionEvent.ACTION_MOVE:
                            //移动时操作
                            break;
                        case MotionEvent.ACTION_UP:
                            //离开时操作
                            break;
                    }
    
    
                    return false;
                }
            });

      ②、onScrollListener

     mListView.setOnScrollListener(new AbsListView.OnScrollListener() {
                @Override
                public void onScrollStateChanged(AbsListView absListView, int state) {
                    switch (state) {
                        case SCROLL_STATE_IDLE:
                            //滑动停止时
                            break;
                        case SCROLL_STATE_TOUCH_SCROLL:
                            //正在滚动
                            break;
    
                        case SCROLL_STATE_FLING:
                            //手指抛动时 即手指用力滑动
                            //在离开后ListView由于惯性继续滑动
                            break;
    
                    }
                }
    
                @Override
                public void onScroll(AbsListView absListView, int firstVisibleItem,
                                     int visibleItemCount, int totalItemCount) {
                    //滑动时一直调用
    
                    //firstVisibleItem:当前能看到的第一个item的id,从0开始
                    //visibleItemCount:当前能看到的Item的总数,显示了一小半的item也包括在内了
                    //整个listView的item总数
                    
                    if(firstVisibleItem+visibleItemCount==totalItemCount && totalItem-count>0){
                        //滑动到最后一行
                    }
                    
                    
                    if(firstVisibleItem>lastVisibleItemPosition){
                        //上滑
                    }else if(firstVisibleItem<lastVisibleItemPosition){
                        //下滑
                    }
                    lastVisibleItemPosition=firstVisibleItem;
                }   
            });

    8.listView获取最后一个item的id和第一个的id

     mListView.getLastVisiblePosition();
     mListView.getFirstVisiblePosition();

    9.具有弹性的listView

      只需重写overScrollBy方法即可

      

     @Override
        protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) {
            return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent);
        }

      重写之后:

     

    @Override
        protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) {
            return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX+slideDistanceX, maxOverScrollY+slideDistanceY, isTouchEvent);
        }

    当然计算的时候为了适应多分辨率:

      DisplayMetrics metrics = context.getResources().getDisplayMetrics();
      float density = metrics.density;
      slideDistanceX =(int)(density * slideDistanceX);
      slideDistanceY =(int)(density * slideDistanceY);
  • 相关阅读:
    访问oss压缩文件失败
    uniapp项目再使用vue-cli启动压缩失败
    航天丰益面试题
    axios上传图片遇见问题
    formateDate
    mongoose中Documents的save方法
    腾讯云nginx配置https
    filter逻辑bug
    vue-infinite-loading 过滤器tab正确使用
    使用pem连接服务器
  • 原文地址:https://www.cnblogs.com/zzw1994/p/5660378.html
Copyright © 2011-2022 走看看