Android 滑动菜单(slide menu) 背景 亮度和透明度设置

小弟最近在做一个androidproject。要实现滑动菜单,从右往左滑进一个listview。用的是drawerlayout,当我把菜单划入的时候,背景会随着划入的程度... 小弟最近在做一个 android project。 要实现滑动菜单,从右往左滑进一个 listview。 用的是drawerlayout, 当我把菜单划入的时候, 背景会随着划入的程度不断变暗。 问题就在于 如何调节背景的亮度和透明度。 QA说太暗了让我调亮, 可是找不到API设置啊! 展开
 我来答
千锋教育
2015-12-05 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
展开全部

首先在sdk目录下source源码目录下搜索DrawerLayout文件,把相关的java文件导入工程

以5.0为例


之后打开DrawerLayout.java文件查看drawerlayout源码分析,可以知道在drawChild函数里绘制主内容的覆盖层达到主内容的透明度效果

所以我们修改drawChild方法里的代码即可,注意给出代码的注释的地方


@Override
    protected boolean drawChild(Canvas canvas, View child, long drawingTime) {
        final int height = getHeight();
        final boolean drawingContent = isContentView(child);
        int clipLeft = 0, clipRight = getWidth();

        final int restoreCount = canvas.save();
        if (drawingContent) {
            final int childCount = getChildCount();
            for (int i = 0; i < childCount; i++) {
                final View v = getChildAt(i);
                if (v == child || v.getVisibility() != VISIBLE ||
                        !hasOpaqueBackground(v) || !isDrawerView(v) ||
                        v.getHeight() < height) {
                    continue;
                }

                if (checkDrawerViewAbsoluteGravity(v, Gravity.LEFT)) {
                    final int vright = v.getRight();
                    if (vright > clipLeft) clipLeft = vright;
                } else {
                    final int vleft = v.getLeft();
                    if (vleft < clipRight) clipRight = vleft;
                }
            }
            canvas.clipRect(clipLeft, 0, clipRight, getHeight());
        }
        final boolean result = super.drawChild(canvas, child, drawingTime);
        canvas.restoreToCount(restoreCount);

        if (mScrimOpacity > 0 && drawingContent) {
        
            /*
            *这里是直接用画笔画了一层有透明度的方块覆盖在主内容上方,产生慢             *慢变暗的效果,所以我们只需要在这里修改即可,
            *根据代码逻辑可以知道我们只需要改变imag即可
            */
            final int baseAlpha = (mScrimColor & 0xff000000) >>> 24;
            final int imag = (int) (baseAlpha * mScrimOpacity);
            final int color = imag << 24 | (mScrimColor & 0xffffff);
            mScrimPaint.setColor(color);

            canvas.drawRect(clipLeft, 0, clipRight, getHeight(), mScrimPaint);
        } else if (mShadowLeft != null && checkDrawerViewAbsoluteGravity(child, Gravity.LEFT)) {
            final int shadowWidth = mShadowLeft.getIntrinsicWidth();
            final int childRight = child.getRight();
            final int drawerPeekDistance = mLeftDragger.getEdgeSize();
            final float alpha =
                    Math.max(0, Math.min((float) childRight / drawerPeekDistance, 1.f));
            //这里是绘制菜单的覆盖物
            mShadowLeft.setBounds(childRight, child.getTop(),
                    childRight + shadowWidth, child.getBottom());
            mShadowLeft.setAlpha((int) (0xff * alpha));
            mShadowLeft.draw(canvas);
        } else if (mShadowRight != null && checkDrawerViewAbsoluteGravity(child, Gravity.RIGHT)) {
            final int shadowWidth = mShadowRight.getIntrinsicWidth();
            final int childLeft = child.getLeft();
            final int showing = getWidth() - childLeft;
            final int drawerPeekDistance = mRightDragger.getEdgeSize();
            final float alpha =
                    Math.max(0, Math.min((float) showing / drawerPeekDistance, 1.f));
            mShadowRight.setBounds(childLeft - shadowWidth, child.getTop(),
                    childLeft, child.getBottom());
            mShadowRight.setAlpha((int) (0xff * alpha));
            mShadowRight.draw(canvas);
        }
        return result;
    }


改变代码之后保存

这时候在布局文件中就不要使用android-supportv4包下的DrawerLayout的,改成你工程里修改后的DrawerLayout,运行就达到效果了

JulioHu706
推荐于2016-02-09 · TA获得超过653个赞
知道小有建树答主
回答量:789
采纳率:0%
帮助的人:431万
展开全部
没有这样的api,透明度可以自己做个,类似动画效果,定义一个xml文件即可。调节亮度要修改settings。比如你滑动的时候要增加亮度到100, Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, 100); 这只是滑动完了之后亮度立马变为100,而不是逐渐变亮,逐渐变亮你可以根据滑动的速度来修改100这个值。如果不行,可能要在AndroidManifest.xml里面添加修改settings的权限,不过4.4好像不需要
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小样丶站住
2014-06-21 · 超过19用户采纳过TA的回答
知道答主
回答量:77
采纳率:0%
帮助的人:54.1万
展开全部
用这个#000~#fff之间就可以实现透明度了
追问
大哥我问的是用什么API 设置啊。 没找到API啊 或者xml里面设置什么。我问的是在哪里设置这个
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式