类微信界面(2)
文章目录
- 前言
- 一、效果展示
- 二、部分核心代码
- 完整代码
前言
本次作业在上次作业的基础上加入了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);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// Inflate the layout for this fragmentView 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));}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// Inflate the layout for this fragmentView 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);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// Inflate the layout for this fragmentView 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;}/*** 设置滑动类型标记*/@Overridepublic int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; // 允许上下拖动int swipeFlags = ItemTouchHelper.LEFT; // 允许从右向左滑动return makeMovementFlags(dragFlags, swipeFlags);}@Overridepublic boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {myAdapter.onItemDismiss(viewHolder.getAdapterPosition(),target.getAdapterPosition());return true;}/*** 滑动删除 Item 的操作*/@Overridepublic void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {myAdapter.onItemDismiss1(viewHolder.getAdapterPosition());}/*** 设置 Item 支持长按拖动*/@Overridepublic boolean isLongPressDragEnabled() {return true;}/*** 设置 Item 支持滑动*/@Overridepublic boolean isItemViewSwipeEnabled() {return true;}/*** Item 被选中时候,改变 Item 的背景*/@Overridepublic 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 的透明度*/@Overridepublic 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 的背景和透明度*/@Overridepublic 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
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
