-
listView实现下拉刷新的四步:1、定义head布局文件2、监听onScrollListener,判断当前是否为第一个item 3、根据手势的不同来判断当前状态 4、调用接口来实现数据刷新查看全部
-
8. 加载完数据之后需要调用 public void refreshComplete(){ state = NONE; isTopDown = false; changeViewByState(); TextView lastupdatetime = (TextView) header .findViewById(R.id.lastupdate_time); SimpleDateFormat format = new java.text.SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss"); Date date = new Date(System.currentTimeMillis()); String time = format.format(date); lastupdatetime.setText(time); } 9. 加载数据需要调用MainActivity的接口(回调) (1)在ListView中定义一个刷新监听器接口 public interface IReflashListener{ public void onReflash(); } (2)MainActivity中实现这个接口查看全部
-
6. 定义一个changeViewByState()方法,用来根据当前的状态改变header布局的显示 public void changeViewByState(){ TextView tip = (TextView) header.findViewById(R.id.tip); TextView lastTime = (TextView) header.findViewById(R.id.lastupdate_time); ImageView arrow = (ImageView) header.findViewById(R.id.arrow); ProgressBar progressBar = (ProgressBar) header.findViewById(R.id.progress); switch (state) { case NONE: topPadding(headerHeight); break; case PULL: arrow.setVisibility(View.VISIBLE); progressBar.setVisibility(View.GONE); tip.setText("Drop down to refresh"); break; case RELEASE: arrow.setVisibility(View.VISIBLE); progressBar.setVisibility(View.GONE); tip.setText("Release to refresh"); break; case REFRESHING: arrow.setVisibility(View.GONE); progressBar.setVisibility(View.VISIBLE); tip.setText("Refreshing..."); break; default: break; } } 7. 在状态改变时调用该方法查看全部
-
4. 在手指移动过程中,需要判断移动过程中各种阶段和操作 在各个状态下,需要设置当前的上边距 public void onMove(MotionEvent ev){ if(!isTopDown){ return;//不是ListView顶端位置按下的,直接return } int tempY = (int) ev.getY();//下拉过程中当前的Y值 int space = tempY - startY; int topPadding = space - headerHeight;//当前上边距 switch (state) { case NONE: if(space > 0 ){ state = PULL; } break; case PULL: topPadding(topPadding); //设置上边距 if(space > headerHeight+30 && scrollState == SCROLL_STATE_TOUCH_SCROLL){ //SCROLL_STATE_TOUCH_SCROLL表示还在下拉 state = RELEASE; } break; case RELEASE: topPadding(topPadding); if(space < headerHeight+30){ state = PULL; }else if(space <= 0 ){ state = NONE; isTopDown = false; } break; case REFRESHING: topPadding(topPadding); break; default: break; } } 5. 在onTouchEvent()方法中,判断手指抬起时的状态 case MotionEvent.ACTION_UP: if(RELEASE == state){ //如果是“松开可以刷新”状态,转变状态,并且刷新数据 state = REFRESHING; }else if(PULL == state){ //在提示“下拉可以刷新”状态抬起,恢复当前状态,并且将标记为重置 state = NONE; isTopDown = false; } 6. 定义一个changeViewByState()方法,用来根据当前的状态改变header布局的显示查看全部
-
下拉刷新 1. 为自定义的listView添加一个header布局 public void initView(Context context){ mInflater = LayoutInflater.from(context); header = mInflater.inflate(R.layout.header_layout, null); this.addHeaderView(header); } 然后在自定义ListView的构造函数中调用initView() 2. View.invalidate()方法----重绘view 3. 在ListView中需要重写onTouchEvent()方法,用于监听MotionEvent的各种动作 public boolean onTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN://按下 if(firstVisibleItem == 0){ isTopDown = true; //是在ListView处于最顶端时按下的 startY = (int) ev.getY(); } break; case MotionEvent.ACTION_MOVE://移动 break; case MotionEvent.ACTION_UP://抬起 break; default: break; } return super.onTouchEvent(ev); } 注意在刚开始按下时需要通过firstVisibleItem是否为0来判断当前ListView是否处于最顶端,如果在最顶端会做一个标记,并记录最开始的Y位置。 4. 在手指移动过程中,需要判断移动过程中各种阶段和操作 因为在手指下拉的过程中,需要经过几个状态 (1)提示“下拉可以刷新”状态 (2)提示“松开可以刷新”状态 (3)提示“正在刷新”状态 (4)正常状态 所以在下拉过程中,需要判断这几个状态,并根据这几个状态进行相应的操作查看全部
-
1、写一个顶部布局文件head.xml 2、写一个继承自ListView类(注意重写三种构造方法),用作列表项,自定义方便在初始化时添加表头 3、定义一个View header通过LayoutInflater获取顶部布局文件head.xml 4、通过listview.addHeaderView(header)来为ListView添加头部布局查看全部
-
listView下拉刷新四个步奏查看全部
-
自定义接口0第一步在自己的类里定义一个接口查看全部
-
1.LayoutParams相当于一个Layout的信息包,它封装了Layout的位置、高、宽等信息。如果将一个View添加到一个 Layout中,最好告诉Layout用户期望的布局方式,也就是将一个认可的layoutParams传递进去。 2.Android的UI界面都是由View和ViewGroup及其派生类组合而成的,作为容器的ViewGroup可以包含作为叶子节点的View,也可以包含作为更低层次的子ViewGroup 3.getLayoutParams就是将布局参数的引用返回来 4.makeMeasureSpec()创建基于所提供的大小和模式来返回MeasureSpec值查看全部
-
实现方式分析查看全部
-
ListView下拉刷新实现方式: 1.需要添加顶部下拉加载界面; 2.我们需要监听onScrollListener,来判断当前是否显示在listview的最顶部; 3.因为顶部下拉加载界面是跟随手势滑动状态不断改变界面显示的所以我们需要监听onTouch事件,来改变当前状态以及界面显示; 4.根据当前状态加载数据查看全部
-
ListView下拉刷新实现方式分析: 1.需要添加顶部下拉加载界面; 2.我们需要监听onScrollListener,来判断当前是否显示在listview的最顶部; 3.因为顶部下拉加载界面是跟随手势滑动状态不断改变界面显示的所以我们需要监听onTouch事件,来改变当前状态以及界面显示; 4.根据当前状态加载数据查看全部
-
我们通过将header的上边距设置成它的高度负值,我们就实现了header的隐藏。这样实现隐藏的好处是:我们可以动态地显示header。查看全部
-
创建一个设置listview的header布局的上边距的方法,这样通过将header的上边距设置成负值,我们就可以实现动态的隐藏和现实header了,就实现了动态显示出来的效果。查看全部
-
1.LayoutParams相当于一个Layout的信息包,它封装了Layout的位置、高、宽等信息。如果将一个View添加到一个 Layout中,最好告诉Layout用户期望的布局方式,也就是将一个认可的layoutParams传递进去。 2.Android的UI界面都是由View和ViewGroup及其派生类组合而成的,作为容器的ViewGroup可以包含作为叶子节点的View,也可以包含作为更低层次的子ViewGroup 3.getLayoutParams就是将布局参数的引用返回来 4.makeMeasureSpec()创建基于所提供的大小和模式来返回MeasureSpec值查看全部
举报
0/150
提交
取消