RecyclerView布局的点击(并非item的点击)

                近期在开发过程中,遇到这样的一个需求:横向列表点击跳转。

              

               也算是几年的老开发,第一个想到的当然是HorizontalListView.

         又想到5.0以后出了一个特别好用的RecyclerView,支持ListView的各种展示效果,

         所以就研究了一下,发现使用起来特别简单,就开始用RecyclerView控件开发。

         首先当然是初始化RecyclerView,除了把默认的垂直布局改为水平布局之外其它的原封不动。

//        recycleAdapter=new ProjectRecycleAdapter(this,);
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        //设置为水平布局
     layoutManager.setOrientation(OrientationHelper.HORIZONTAL);
        //设置布局管理器
     recyclerView.setLayoutManager(layoutManager);
//设置Adapter
        recycleAdapter = new ProjectRecycleAdapter(this);
        recyclerView.setAdapter(recycleAdapter);
//设置增加或删除条目的动画
     recyclerView.setItemAnimator(new DefaultItemAnimator());
          首先遇到的第一个问题,当然是这个控件居然没有OnItemClickListener这个监听。

       不过在adapter里针对子布局写了个OnClickListener监听也可以实现。

       第二个问题,需求上声明点击横向列表整块布局时跳转。

       第一个想到的是给RecyclerView加OnClickListener监听,然而发现加上后也并无卵用。

       第二个想到的是给RecyclerView的父控件加OnClickListener监听,并把RecyclerView的ontouch事件屏蔽了。

       但是如果把它的ontoch事件屏蔽,RecyclerView自带的横向滑动效果不也失去了么。

       然后我就开始重写RecyclerView的ontouch模拟点击

       刚开始想监听到event.ACTION_UP或event.ACTION_DOWN 后直接跳转,但是发现触发太敏感,体验不好。

       之后做了改进。并实现点击RecyclerView让后面的TextView跟着点击状态改变按压动作。

recyclerView.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        Drawable drawable = getResources().getDrawable(R.drawable.back_default);//正常状态
        Drawable drawable_pressed = getResources().getDrawable(R.drawable.back_pressed);//按压状态
        int w = drawable.getIntrinsicWidth();//图片原始宽度
        int h = drawable.getIntrinsicHeight();//图片原始高度
        drawable.setBounds(0, 0, w, h);
        drawable_pressed.setBounds(0, 0, w, h);
        if (event.getAction() == event.ACTION_DOWN) {
            scrollX = event.getX();
            scrollY = event.getY();
            member_num.setTextColor(getResources().getColor(R.color.project_member_pressed));
            member_num.setCompoundDrawables(null, null, drawable_pressed, null);
        }
        if (event.getAction() == event.ACTION_UP) {
            member_num.setTextColor(getResources().getColor(R.color.project_member));
            member_num.setCompoundDrawables(null, null, drawable, null);
            if (Math.abs(scrollX - event.getX()) <= 5 && Math.abs(scrollY - event.getY()) <= 5) {
                Intent intent = new Intent(ProjectDetailActivity.this, ProjectMemberListActivity.class);
                startActivity(intent);
            }
        }
        return false;
    }
});

    希望给遇到同样问题的同学有帮助。谢谢。


猜你喜欢

转载自blog.csdn.net/u010351988/article/details/54290791
今日推荐