• ViewDragHelper的使用


    作用:   

    ViewDragHelper并不是直接作用于要被拖动的View,而是使其控制的视图容器中的子View可以被拖动,如果要指定某个子view的行为,需要在Callback中想办法;

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

    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()创造的时候让侧滑栏先滑到左边去

    详解:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0911/1680.html

  • 相关阅读:
    数组
    Fiddler抓手机APP包
    APP测试注意点-安装卸载与运行
    【转】查看iOS崩溃日志
    Monkey 命令
    python del 函数
    探索性测试方法
    解决5037端口占用的方法
    App测试Android的闪退总结
    Jenkins邮件配置
  • 原文地址:https://www.cnblogs.com/rookiechen/p/5514642.html
Copyright © 2020-2023  润新知