Android-模仿QQ的侧滑(解决DraweLayout不能向右滑动打开抽屉视图)

DraweLayout基础使用的代码就不贴了,主要解决不能向右滑动打开抽屉视图的问题

找了网上很多,都没有找到合适的,都是一些对DrawerLayout的基本使用,好不容易找到一个SlidingMenu,结果还得配置版本,故此尝试着改一下DrawerLayout代码,由于改动非常简单就不废话了,如您又更好的方法,可以留言给我,不想改源代码。。。。

ps:直接将DrawerLayout和ViewDragHelper拷贝出来就能修改。

效果图:

第一步:好设置抽屉控件宽度,因为它不是全屏的。在Activity或Fragment 视图初始化后就可以设置了,

// 设置抽屉控件宽度,设置简单,就不修改DrawerLayout代码了
mDatabind.linear.setWidth(getWindowWidth(this))

fun View.setWidth(w: Int) {
    val params = layoutParams
    params.width = w
    layoutParams = params
}

fun getWindowWidth(activity:Activity): Int {
    val metrics = DisplayMetrics()
    activity.windowManager.defaultDisplay.getMetrics(metrics)
    return metrics.widthPixels
}

第二步:实现在未打开抽屉试图时,拖拽主视图打开抽屉试图。内部逻辑就是通过ViewDragHelper.findTopChildUnder获取的View,然后判断是否是抽屉试图,如果是抽屉试图就可以进行拖拽,所以这里我们直接让他获取到。

// 此代码在ViewDragHelper类中
    @Nullable
    public View findTopChildUnder(int x, int y) {
        /*final int childCount = mParentView.getChildCount();
        for (int i = childCount - 1; i >= 0; i--) {
            final View child = mParentView.getChildAt(mCallback.getOrderedChildIndex(i));
            if (x >= child.getLeft() && x < child.getRight()
                    && y >= child.getTop() && y < child.getBottom()) {
                return child;
            }
        }
        return null;*/
        for (int i = 0; i < mParentView.getChildCount(); i++) {
            View child = mParentView.getChildAt(i);
            final int gravity = ((CustomDrawerLayout.LayoutParams) child.getLayoutParams()).gravity;
            final int absGravity = GravityCompat.getAbsoluteGravity(gravity,
                    ViewCompat.getLayoutDirection(child));
            // 这里可以根据手势,来返回抽屉对象,我这里就左边的就够用了
            if ((absGravity & Gravity.LEFT) != 0) {
                // This child is a left-edge drawer
                return child;
            }
        }
        return null;
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值