导航抽屉打开时变暗/变暗/模糊活动

时间:2015-05-20 03:43:10

标签: java android navigation-drawer

我在我的项目中使用LDrawer。当导航抽屉打开时,我需要使托管导航抽屉的活动变暗/变暗/模糊。

我在Stackoverflow上遇到了类似的问题,我没有找到令人满意的答案。

当我打开NavigationDrawer

时,是否有任何简单的技巧可以使活动的布局变暗/暗淡/模糊

我的活动RelativeLayout定义为

RelativeLayout myActivity = (RelativeLayout) findViewById(R.id.myActivity)

我有NavigationDrawer下面的切换代码

public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == android.R.id.home) {
            if (mDrawerLayout.isDrawerOpen(mDrawerList)) {
                mDrawerLayout.closeDrawer(mDrawerList);
            } else {
               //I want to manipulate myActivity's Layout here
                mDrawerLayout.openDrawer(mDrawerList);
            }
        }
        return super.onOptionsItemSelected(item);
    }

1 个答案:

答案 0 :(得分:0)

当我打开NavigationDrawer时,是否有任何简单的技巧可以使活动的布局变暗/变暗/模糊?

是的,您可以在打开抽屉时将活动的背景图像更改为模糊。

其他方法是简单地通过setalpha()更改alpha或您的活动,并传递您想要的更改量。

如果您对自己的活动有列表控制,并且想要模糊,那么下面的代码就可以了。

Display display = getActivity().getWindowManager().getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);
        int screenWidth = size.x;
        int screenHeight = size.y;

Bitmap blurBitmap = BitmapFactory.decodeResource(getResources(),
                R.drawable.invitation_blur_bg);

        Rect rect = new Rect(0, 0, blurBitmap.getWidth(), blurBitmap.getHeight());

在您要应用此活动或片段的活动或片段上实施OnScrollListener。

@Override
    public void onScroll(AbsListView view, int firstVisibleItem,
            int visibleItemCount, int totalItemCount) {

        for (int i = 0; i < listview.getChildCount(); i++) {
            View c = listview.getChildAt(i);

            Rect r = new Rect(); 
            c.getHitRect(r);

            RelativeLayout llItemBg = ((RelativeLayout ) c.findViewById(R.id.root_layout of list item);

            Drawable d = new BitmapDrawable(getResources(), cropImage(r,c));

            itemBackground.setBackgroundDrawable(d);

        }
    }
    private Bitmap cropImage(Rect r, View c2) {

        Bitmap bmOverlay = Bitmap.createBitmap(screenWidth - 60,
                c2.getHeight(), Bitmap.Config.ARGB_8888);
        Rect rect1=new Rect(0, 0, bmOverlay.getWidth(), bmOverlay.getHeight());
        Paint p = new Paint();
        Canvas c = new Canvas(bmOverlay);
        rect.right = r.right;
        rect.top = rect.top;
        rect.bottom = r.bottom / 2;

        c.drawBitmap(blurBitmap, r, rect1, p);

        return bmOverlay;
    }