前言
本次作业在上次作业的基础上加入了recyclerview布局
参考网址1
参考网址2
一、效果展示
微信界面可以进行横向滑动删除以及拖动换位操作,朋友界面可以实现展开和缩回功能,通讯录则实现横向滑动显示
二、部分核心代码
此次使用recycleview布局是将每个tab.xml中加入recycleview控件,再对于每个控件添加不同布局的item.xml文件
然后将其在fragment.java文件里进行调用
weixinFragment:
public class weixinFragment extends Fragment {
private weixin_adapter adapter;
private RecyclerView recyclerView;
private List<String> list = new ArrayList<>();
private Context context;
public weixinFragment() {
// Required empty public constructor
}
private void initData(){
list.add("嫌疑人A发来问候");
list.add("嫌疑人B发来问候");
list.add("嫌疑人C发来问候");
list.add("嫌疑人D发来问候");
list.add("嫌疑人E发来问候");
list.add("嫌疑人F发来问候");
list.add("嫌疑人G发来问候");
list.add("嫌疑人H发来问候");
list.add("嫌疑人I发来问候");
list.add("嫌疑人J发来问候");
list.add("嫌疑人K发来问候");
list.add("嫌疑人L发来问候");
list.add("嫌疑人M发来问候");
list.add("嫌疑人N发来问候");
list.add("嫌疑人O发来问候");
list.add("嫌疑人P发来问候");
list.add("嫌疑人Q发来问候");
list.add("嫌疑人R发来问候");
list.add("嫌疑人S发来问候");
list.add("嫌疑人T发来问候");
list.add("嫌疑人U发来问候");
list.add("嫌疑人V发来问候");
list.add("嫌疑人W发来问候");
list.add("嫌疑人X发来问候");
list.add("嫌疑人Y发来问候");
list.add("嫌疑人Z发来问候");
}
private void initView1(){
context=this.getActivity();
adapter=new weixin_adapter(context,list);
ItemTouchHelper.Callback callback = new SwipeItemTouchHelper(adapter);
ItemTouchHelper touchHelper = new ItemTouchHelper(callback);
touchHelper.attachToRecyclerView(recyclerView);
LinearLayoutManager manager=new LinearLayoutManager(context);
manager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(manager);
recyclerView.setHasFixedSize(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.tab01, container, false);
recyclerView=view.findViewById(R.id.item1);
initData();
initView1();
return view;
}
}
friendFragment:
public class friendFragment extends Fragment {
private friend_adapter adapter;
private RecyclerView recyclerView;
private List<String> list = new ArrayList<>();
private Context context;
public friendFragment() {
// Required empty public constructor
}
private void initData(){
list.add("嫌疑人A");
list.add("嫌疑人B");
list.add("嫌疑人C");
list.add("嫌疑人D");
list.add("嫌疑人E");
list.add("嫌疑人F");
list.add("嫌疑人G");
list.add("嫌疑人H");
list.add("嫌疑人I");
list.add("嫌疑人J");
list.add("嫌疑人K");
list.add("嫌疑人L");
list.add("嫌疑人M");
list.add("嫌疑人N");
list.add("嫌疑人O");
list.add("嫌疑人P");
list.add("嫌疑人Q");
list.add("嫌疑人R");
list.add("嫌疑人S");
list.add("嫌疑人T");
list.add("嫌疑人U");
list.add("嫌疑人V");
list.add("嫌疑人W");
list.add("嫌疑人X");
list.add("嫌疑人Y");
list.add("嫌疑人Z");
}
private void initView2(){
context=this.getActivity();
adapter=new friend_adapter(context,list);
LinearLayoutManager manager2=new LinearLayoutManager(context);
manager2.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(manager2);
recyclerView.setHasFixedSize(true);
recyclerView.addItemDecoration(new DividerItemDecoration(context, DividerItemDecoration.VERTICAL));
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view= inflater.inflate(R.layout.tab02, container, false);
recyclerView=view.findViewById(R.id.item2);
initData();
initView2();
return view;
}
}
contactFragment:
public class contactFragment extends Fragment {
private RecyclerView recyclerView;
private List<String> myList=new ArrayList<>();
private Context context;
private contact_adapter adapter;
public contactFragment() {
// Required empty public constructor
}
private void initData(){
myList.add("嫌疑人A");
myList.add("嫌疑人B");
myList.add("嫌疑人C");
myList.add("嫌疑人D");
myList.add("嫌疑人E");
myList.add("嫌疑人F");
myList.add("嫌疑人G");
myList.add("嫌疑人H");
myList.add("嫌疑人I");
myList.add("嫌疑人J");
myList.add("嫌疑人K");
myList.add("嫌疑人L");
myList.add("嫌疑人M");
myList.add("嫌疑人N");
myList.add("嫌疑人O");
myList.add("嫌疑人P");
myList.add("嫌疑人Q");
myList.add("嫌疑人R");
myList.add("嫌疑人S");
myList.add("嫌疑人T");
myList.add("嫌疑人U");
myList.add("嫌疑人V");
myList.add("嫌疑人W");
myList.add("嫌疑人X");
myList.add("嫌疑人Y");
myList.add("嫌疑人Z");
}
private void initView3() {
context=this.getActivity();
contact_adapter adapter = new contact_adapter(context);
RecyclerView item3= recyclerView.findViewById(R.id.item3);
LinearLayoutManager manager_3 = new LinearLayoutManager(context);
manager_3.setOrientation(LinearLayoutManager.HORIZONTAL);
item3.setLayoutManager(manager_3);
item3.setHasFixedSize(true);
item3.setAdapter(adapter);
adapter.setVerticalDataList(myList);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.tab03, container, false);
recyclerView=view.findViewById(R.id.item3);
initData();
initView3();
return view;
}
}
其中实现xeixin功能需添加监听 SwipeItemTouchHelper.java
public class SwipeItemTouchHelper extends ItemTouchHelper.Callback{
private weixin_adapter myAdapter;
public SwipeItemTouchHelper(weixin_adapter adapter) {
myAdapter = adapter;
}
/**
* 设置滑动类型标记
*/
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; // 允许上下拖动
int swipeFlags = ItemTouchHelper.LEFT; // 允许从右向左滑动
return makeMovementFlags(dragFlags, swipeFlags);
}
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
myAdapter.onItemDismiss(viewHolder.getAdapterPosition(),target.getAdapterPosition());
return true;
}
/**
* 滑动删除 Item 的操作
*/
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
myAdapter.onItemDismiss1(viewHolder.getAdapterPosition());
}
/**
* 设置 Item 支持长按拖动
*/
@Override
public boolean isLongPressDragEnabled() {
return true;
}
/**
* 设置 Item 支持滑动
*/
@Override
public boolean isItemViewSwipeEnabled() {
return true;
}
/**
* Item 被选中时候,改变 Item 的背景
*/
@Override
public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
// item 被选中的操作
if (actionState != ItemTouchHelper.ACTION_STATE_IDLE) {
viewHolder.itemView.setBackgroundResource(R.drawable.select_bg);
}
super.onSelectedChanged(viewHolder, actionState);
}
/**
* 移动过程中重新绘制 Item,随着滑动的距离,设置 Item 的透明度
*/
@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
float x = Math.abs(dX) + 0.5f;
float width = viewHolder.itemView.getWidth();
float alpha = 1f - x / width;
viewHolder.itemView.setAlpha(alpha);
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
}
/**
* 用户操作完毕或者动画完毕后调用,恢复 item 的背景和透明度
*/
@Override
public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
// 操作完毕后恢复颜色
viewHolder.itemView.setBackgroundResource(R.drawable.common_bg);
viewHolder.itemView.setAlpha(1.0f);
super.clearView(recyclerView, viewHolder);
}
}
完整代码
代码见gitee仓库:https://gitee.com/nekopalaa/htwechat-v2.0