类微信界面(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);
    }

    @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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值