码迷,mamicode.com
首页 > 其他好文 > 详细

ViewDragHelper的使用

时间:2016-05-21 14:25:13      阅读:301      评论:0      收藏:0      [点我收藏+]

标签:

使用步骤(实现侧滑栏):

1、将ViewGroup中的点击事件都交给ViewDragHelper

技术分享
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    return mViewDragHelper.shouldInterceptTouchEvent(ev);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    mViewDragHelper.processTouchEvent(event);
    return true;
}
传递点击事件

2、重写ViewDragHelper.Callback,事件的回调都在Callback处理

技术分享
   private ViewDragHelper.Callback mCallback = new ViewDragHelper.Callback() {
        @Override
        //当松手的时候回调该方法
        public void onViewReleased(View releasedChild, float xvel, float yvel) {
            super.onViewReleased(releasedChild, xvel, yvel);
//mLinearMain.getLeft()的效果竟然与mLinearMain.getScrollX()一样
            if (mLinearMain.getLeft() < 100){
               //弹性滑动到0,0点 mViewDragHelper.smoothSlideViewTo(mLinearMain,0,0);
            }
            else {
                 //弹性滑动到300,0点 mViewDragHelper.smoothSlideViewTo(mLinearMain,300,0);
            }
            Log.d(TAG,mLinearMain.getX()+"");
          ViewCompat.postInvalidateOnAnimation(SliderFrameLayout.this);
        }
      //是否让所点击的View移动
       @Override
        public boolean tryCaptureView(View child, int pointerId) {
            boolean isMove = false;
            if (child == mLinearMain)
                isMove = true;
            return isMove;
        }
      //横向移动  当然还有纵向移动的方法
        @Override
        public int clampViewPositionHorizontal(View child, int left, int dx) {
            return left;
        }
    };
实现Callback

3、因为mViewDragHelper.smoothSlideViewTo(mLinearMain,0,0);方法内部是实现了Scroller.startScroll()

所以需要调用父View的computeScroll()方法

技术分享
     @Override
     public void computeScroll() {
         super.computeScroll();
         if (mViewDragHelper.continueSettling(true)){
             //ViewCompat用于版本兼容的
             ViewCompat.postInvalidateOnAnimation(this);
         }
     }
View Code

4、创建ViewDragHelper

技术分享
    public void initView(){
        mViewDragHelper = ViewDragHelper.create(this,mCallback);
    }
创建View

过程中产生的问题:

1、为什么子View的getLeft()能够与getScrollX()得到是一样的

2、RelativeLayout,无法实现子类超出其Width和Height。

3、如何创建左侧滑栏的布局。查到的原理:创建HorizonSliderLayout,然后在onLayout()方法中使用scrollTo()创造的时候让侧滑栏先滑到左边去

ViewDragHelper的使用

标签:

原文地址:http://www.cnblogs.com/rookiechen/p/5514642.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!