无需存款送彩金


无需存款送彩金相亲中。女:“你有什么特长吗?”男:“有钱算不算特长?”女大喜:“算。”男:“哦,那没有。”无需存款送彩金准备什么呀?儿子走在中间搭着我们的肩说:我准备努力两年考个好大学,然后找个好工作。爸,妈。儿子收了手面对着我们退着走说:如果我在二十八岁还没结婚,也没有女朋友,您们也让我相亲。说完转过身哈哈大笑。我与老婆对视无言。
无需存款送彩金倾注着情感
无需存款送彩金激励人的话人生只有走出来的美丽,没有等出来的辉煌。2、天再高又怎样,踮起脚尖就更接近阳光。3、别小看任何人,不起眼的人往往会做些让人想不到的事。4、自信的生命最美丽。5、压力都是自己...[阅读全文]
无需存款送彩金把你拥入怀里  多么希望  时间停止  岁月不老
无需存款送彩金比尔误把一瓶汽油当酒喝到肚子里了,他很紧张,就去找医生。  医生说:“没关系,只是在一周内不要吸烟。”无需存款送彩金郝蕾看到她哥哥进入房间问,这次郝蕾没有跳起来扑入郝仁的怀中,如果是往常早就扑了上来,看来这件事情对她还是有一定的打击的。无需存款送彩金午休时间,在办公室,我们大家聊到了“成熟”的话题。  老赵说:“现在的年轻人也不知道怎么了,我邻居的女儿都30多岁了,可还不找对象。我儿子也都30岁开外的人了,还整天泡游戏厅。这不,今天早晨才回来,没办法!所以我觉得,现在的人成熟得太晚了。”  旁边的老陈接过话说:“也不尽然。就我那个刚上小学的小孙女都交了两个小男朋友了,每天放学回家都嚷着要上网与男朋友聊天。”  这时,小郭插话道:“哎!现在是该熟的不‘熟’,不该熟的却都‘熟’了。”无需存款送彩金家有狗吃货一枚。我每次拿手指着它”biang”的一声,它就躺地上装死,然后给它吃的。但是现在只要看到我在吃东西就很自觉地直接躺地上。有次我在吃饭,它跑来往地上一躺,我没理它,它就一直躺着。过了会,我看没动静,看了它一眼,结果发现这货躺着睡着了!睡着了!无需存款送彩金刚刚开车去商场买东西看到一个女生连倒三次都没把车停入车位,  看得我好着急,于是指挥她把车挪出来,  让她看我示范一次,一次就成功!  然后我又给她讲解了停车的各种要领,  现在女生找车位去了。

皇冠足球比分

大发论坛时时彩平台尊龙娱乐是黑网吗海天国际娱乐城注册送钱凯发娱乐乐宝娱乐城真人赌钱亚美国际娱乐城 金龙国际 www.am8.com 亚洲城娱乐 老k国际娱乐城 666k8.com 金威国际娱乐城 名人国际娱乐城 ag娱乐平台 V博娱乐城 欢乐谷娱乐网站地图申请68元彩金网站地图大发888新址网站地图3Dc藏机图乐透网网站地图凯发电气 股吧网站地图新加坡金沙网站地图888真人网址网站地图http://tinyurl.com/nwbsgz5网站地图卢克索娱乐现金网网站地图六彩开奖结果网站地图丰合国际娱乐网站地图真人注册送钱e8889.com网站地图钻石国际娱乐城博彩网站地图网上牛牛网站地图博天堂北川网站地图888真人注册送钱e8889.com网站地图GO博国际网站地图ag88环亚网站地图骰子赌博游戏网站地图e乐博线上娱乐网站地图2015最新豪华蓝钻活动网站地图互博国际球彩客户端网站地图葡京娱乐场老板网站地图好望角娱乐城网站地图线上百家乐网站地图利记娱乐城网站地图

为RecyclerView定制可滑动的Item

  最近项目有需要弄一个可以像手机QQ会话页一样可以滑动的小菜单,每一个Item当用户在向左滑动的时候右侧会出现一个小菜单当时就想在也不是很难心想着找个开源的使用就好呢,但是我的项目是用的RecyclerView网上基本没有类似的没办法只能自己弄一个。

  先说一说我的实现原理我把每个Item看成一个LinearLayout它包含两个子控件一个是Item要显示的内容还有一个当然就是我们的右侧菜单了,这个顶部LinearLayout就是包含内容与菜单的容器,通过滚动这个容器的scrollX来显示我们的菜单,原理还是不难的,我把整个菜单的显示与隐藏把封闭在ItemSlideHelper里面这样想换一种方法实现也不用去别的代码很方便,当然ItemSlidHelper是要实现RecyclerView.OnItemTouchListener的因为我们的基本操作都是基于Touch事件的,有兴趣的可以看看,有BUG可以回复我。

  关于RecyclerView.OnItemTouchListener的几个方法我也学习了下也不是很难主要是拦截与操作这两个东西一定要配合好,还有就是RecyclerView的滚动状态,因为在RecyclerVIew滚动的时候我们的滑动菜单是不能操作的不然就会产生混乱,在项目开发的时候由于我的Item是有onClick事件的,那么在用户滑出菜单的时候也要把onClick事件给拦截但是又不能拦截菜单的Onclick事件我是通过容器的rect与scrollX的偏移来解决这个问题的可以看源码就知道呢。下面是拦截代码。

    @Override
    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {

        if(!mCallback.isEnable())
            return false;

        int action =  MotionEventCompat.getActionMasked(e);
        int x = (int) e.getX();
        int y = (int) e.getY();

        /*
        * 当我们没有发生drag事件的时候cancel或up事件会发生interceptTouchEvent里面,如果TargetView等于空的时候直接
        * 返回false,不拦截事件
        * */
        if(action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP)
            if(mTargetView == null)
                return false;

        boolean needIntercept = false;
        switch (action) {
            case MotionEvent.ACTION_DOWN:


                mActivePointerId = MotionEventCompat.getPointerId(e, 0);
                mLastX = (int) e.getX();
                mLastY = (int) e.getY();

                //查找需要显示菜单的view;
                mTargetView = mCallback.findTargetView(x, y);


                /*
                * 如果正在动画则拦截事件
                * */
                if (mExpandAndCollapseAnim != null) {
                    //mExpandAndCollapseAnim.cancel();
                    mExpandAndCollapseAnim = null;
                    needIntercept = true;
                }
                break;
            case MotionEvent.ACTION_MOVE:

                int deltaX = (x - mLastX);
                int deltaY = (y - mLastY);

                if(Math.abs(deltaY) > Math.abs(deltaX))
                    return false;

                //如果移动距离达到要求,则拦截
                needIntercept = mIsDragging = mTargetView != null && Math.abs(deltaX) >= mTouchSlop;
                break;

            case MotionEvent.ACTION_CANCEL:
            case MotionEvent.ACTION_UP:

                /*
                * 当一个up事件发生在正常的范围内且scrollX等于scrollRange则折叠view并拦截UP事件
                * 防止view响应点击事件
                * */
                if(isExpanded()){

                    if (inView(x, y)) {
                        //拦截事件,防止targetView执行onClick事件
                        needIntercept = true;
                    }else{
                        //如果走这那行这个ACTION_UP的事件会发生在右侧的菜单中
                    }

                    //折叠菜单
                    mTargetView.setScrollX(0);
                }
                dispatchCollapsedOrExpanded();
                break;
        }

        return  needIntercept && mTargetView != null;
    }

   对于滚动和动画的一些操作就比较简单了,没有DOWN事件是因为RecyclerView会在转发这个事件的事件故意不转发的可以看RecyclerViewr的dispatchOnItemTouch方法就知道了,在MOVE里面直接算一下移动的距离之类的就好了,通过deltaX来滚动容器的scrollX这样就可以实现在拖动时候显示或隐藏右侧的菜单。

  @Override
    public void onTouchEvent(RecyclerView rv, MotionEvent e) {

        //如果要响应fling事件设置将mIsDragging设为false
        if (mGestureDetector.onTouchEvent(e)) {
            mIsDragging = false;
            return;
        }


        int x = (int) e.getX();
        int y = (int) e.getY();
        int action =  MotionEventCompat.getActionMasked(e);
        switch (action) {
            case MotionEvent.ACTION_DOWN:
                //RecyclerView 不会转发这个Down事件

                break;
            case MotionEvent.ACTION_MOVE:
                int deltaX = (int) (mLastX - e.getX());
                horizontalDrag(deltaX);
                mLastX = x;
                break;

            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL:

                 if(mIsDragging){
                    smoothHorizontalExpandOrCollapse(0);
                }

                dispatchCollapsedOrExpanded();
                mIsDragging = false;

                break;
        }


    }

 

在使用的时候一定要调用下面代码将ItemslideHelper与RecyclerView关联起来.

        mRecyclerView.addOnItemTouchListener(new ItemSlideHelper(mRecyclerView.getContext(), this));

 

  

项目我已经传到Github上了

https://github.com/yjwfn/slideitem.git

posted @ 2015-11-28 13:33 惊天霸戈 阅读(...) 评论(...) 编辑 收藏