PtrSwipeMenuRecyclerView是一个可以侧滑删除。点击的。具备下拉刷新。和
上拉加载的功能;
recyclerView .setItemAnimator(new DefaultItemAnimator());可以设置
itemAnimator的变化;
recyclerView.setLayoutManager(new LinearLayoutManager(this,
LinearLayoutManager.VERTICAL, false));
设置方向变化;
recyclerView.addItemDecoration(new DividerItemDecoration(this,
LinearLayoutManager.VERTICAL));
设置分割线;
recyclerView.smoothScrollToPosition(3);可以滚动到可以的位置;
2接下来一步一步解析布局
HeaderView实现RelativeLayout
init里面设置状态,可以改变view的可见不可见。并且是一个抽象方法去。
让子类view的实现,他的布局,上拉刷新,下拉加载。各种状态去实现,应该
可以去添加一些布局动画效果
3看看适配器;
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup
parent, int viewType) {
if(viewType==HeaderType){
HeaderFooterViewHolder headerFooterViewHolder=new
HeaderFooterViewHolder(headerView);
return headerFooterViewHolder;
}else if(viewType == FooterType) {
HeaderFooterViewHolder headerFooterViewHolde=new
HeaderFooterViewHolder(footerView);
return headerFooterViewHolde;
}else {
View contentView= LayoutInflater.from(parent.getContext
()).inflate(R.layout.content_view_for_test,parent,false);
LinearLayout menuView = (LinearLayout)
LayoutInflater.from(parent.getContext()).inflate
(R.layout.menu_for_test, parent, false);
SwipeMenuLayout swipeMenuLayout = new SwipeMenuLayout
(parent.getContext(),contentView,menuView);
return new ViewHolder(swipeMenuLayout);
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int
position) {
}
4接下来是recyclerView的变化;
1第一接口: public interface OnPullListener {
/**
* 下拉刷新触发执行方法
*/
void onRefresh();
/**
* 加载更多触发执行方法
*/
void onLoadMore();
}
触发监听条件:
@Override
public void onScrolled(int dx, int dy) {
if(!canScrollVertically(1))
加载更多;
}
onInterceptTouchEvent:
拦截垂直滑动的状况。拦截下来进行处理。拦截下来后。进行上拉刷新,和下
拉删除的操作;并且可以通过 int
touchingPosition=getChildAdapterPosition(findChildViewUnder
(startX,startY));获取到当前的情况,
DragSwipeAdapter.ViewHolder viewHolder =
(DragSwipeAdapter.ViewHolder) findViewHolderForAdapterPosition
(touchingPosition);
获取到holder。然后根据postion获取相应的布局
item的布局:这个布局主要控制左滑,和右滑动的情况,并且用到sroller来使
滑动更加平滑;
另外,是通过
private ValueAnimator.AnimatorUpdateListener
scrollBackAnimatUpdateListener = new
ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
float value = (float) valueAnimator.getAnimatedValue();
adapter.getHeaderView().setViewHeight(currHeaderHeight *
value);
if(value==0){
refreshing = false;
}
}
};
根据时间控制动画;
在MainActivity中,控制异步请求;
private class GetDataTask extends AsyncTask<Void,Void,String []>{
@Override
protected void onPostExecute(String[] strings) {
recyclerView.onRefreshComplete();
super.onPostExecute(strings);
}
@Override
protected String[] doInBackground(Void... voids) {
try {
Thread.sleep(1400);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
};
共同学习,写下你的评论
评论加载中...
作者其他优质文章