在Android项目中使用视图实现一个侧滑菜单

  介绍

在Android项目中使用视图实现一个侧滑菜单?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

<强>一、概述

在应用中,经常会出现侧滑菜单,侧滑滑出视图等效果,虽然说Android有很多第三方开源库,但是实际上咱们可以自己也写一个自定义的侧滑视图控件,其实不难,主要涉及到以下几个要点:

1。对Android中窗口类中的DecorView有所了解

2。对照片卷轴类实现平滑移动效果

3。自定义ViewGroup的实现

首先来看看效果图吧:

在Android项目中使用视图实现一个侧滑菜单

在Android项目中使用视图实现一个侧滑菜单”>,,,<img src=

下面是对上面这张图的解释:

1, DecorView为整个窗口界面的最顶层视图。

2, DecorView只有一个子元素为LinearLayout。代表整个窗口界面,包含通知栏,标题栏,内容显示栏三块区域。

3, LinearLayout里有两个FrameLayout子元素。

,(20)为标题栏显示界面。只有一个TextView显示应用的名称。也可以自定义标题栏,载入后的自定义标题栏视图将加入FrameLayout中。

,(21)为内容栏显示界面。就是setContentView()方法载入的布局界面,加入其中只

有了上面的DecorVIew知识背景,现在就来说说怎么添加蒙层视图和将自定义侧滑视图添加到活动的DecorVIew中,首先把蒙层视图添加到

(31) customView中去,然后将自定义侧滑视图添加到(21)FrameLayout中去,至于为什么要这样,是因为考虑到自定义侧滑视图不一定是宽度为屏幕宽度,所以才这么做,而且也方面处理有无标题栏,有无采用沉浸式状态栏设计等情况。

<强>二、自定义侧滑视图的实现

根据上面的概述,大家应该知道大概的思路了,下面我就给出自定义侧滑视图类的核心代码:

1,自定义侧视图用滑到的变量:

//侧滑方向,从哪侧滑出   公共静态enum正电子{   左,右   }   私人上下文mContext;   mActivity私人活动;   私人照片卷轴mScroller=零;//侧滑菜单布局的观点   私人观点mMenuView;//底部蒙层的观点   私人观点mMaskView;   私人int mMenuWidth=0;//屏幕宽度   私人int mScreenWidth=0;//是否在滑动中   私人布尔mIsMoving=false;//显示登录界面与否   私人布尔mShow=false;//滑动动画时间   私人int mDuration=600;//缺省侧滑方向为左   私人正电子mPositon=Positon.LEFT;

2,初始化创建自定义侧滑观点:

* *   *创建侧滑菜单视图   */公共静态XCSlideView创建活动(活动){=new XCSlideView XCSlideView视图(活动);   返回视图;   }/* *   *创建侧滑菜单视图   */公共静态XCSlideView创建活动活动,正电子正电子){=new XCSlideView XCSlideView视图(活动);   视图。mPositon=阵地;   返回视图;   }

3,创建半透明蒙层视图,并添加到contentView中去

/* *   *创建蒙层视图并添加到contentView中   */私人空间attachToContentView(活动活动,正电子正电子){   mPositon=阵地;   ViewGroup contentFrameLayout=(ViewGroup) activity.findViewById (android.R.id.content);   ViewGroup contentView=((ViewGroup) contentFrameLayout.getChildAt (0));   mMaskView=新视图(活动);   mMaskView.setBackgroundColor (mContext.getResources () .getColor (R.color.mask_color));   contentView。addView (mMaskView contentView.getLayoutParams ());   mMaskView.setVisibility (View.GONE);   mMaskView.setClickable(真正的);   mMaskView.setOnClickListener (new>/* *   *设置侧滑菜单视图,并添加到DectorView→LinearLayout→内容显示区域视图中   */公共空间setMenuView(活动活动,查看视图){   mActivity=活动;   mMenuView=视图;   LayoutParams params=new LayoutParams (LayoutParams。MATCH_PARENT LayoutParams.MATCH_PARENT);   addView (mMenuView params);   mMenuView。邮报》(新Runnable () {   @Override   公共空间run () {//TODO自动生成方法存根   mMenuWidth=mMenuView.getWidth ();   开关(mPositon) {   例左:   XCSlideView.this。scrollTo (mScreenWidth 0);   打破;   例吧:   XCSlideView.this。scrollTo (-mScreenWidth 0);   打破;   }      }   });   ViewGroup contentFrameLayout=(ViewGroup) activity.findViewById (android.R.id.content);   ViewGroup contentView=contentFrameLayout;   contentView.addView(这个);   FrameLayout。LayoutParams LayoutParams=(FrameLayout.LayoutParams) this.getLayoutParams ();   开关(mPositon) {   例左:   layoutParams。重力=Gravity.LEFT;   layoutParams。leftMargin=0;   打破;   例吧:   layoutParams。重力=Gravity.RIGHT;   layoutParams。rightMargin=0;   打破;   }   TextView titleFrameLayout=(TextView) activity.findViewById (android.R.id.title);   如果(titleFrameLayout !=null) {   layoutParams。页面顶栏=DensityUtil.getStatusBarHeight (mContext);   }   .flags .getAttributes int旗帜=mActivity.getWindow () ();   int国旗=(旗帜,WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);   如果(标志==WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) {//说明状态栏使用沉浸式   layoutParams。页面顶栏=DensityUtil.getStatusBarHeight (mContext);   }   this.setLayoutParams (layoutParams);   }

在Android项目中使用视图实现一个侧滑菜单