如何在Android项目中自定义侧滑菜单栏

  介绍

本篇文章给大家分享的是有关如何在Android项目中自定义侧滑菜单栏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

自定义侧滑菜单的简单实现

不少应用中都有这种侧滑菜单,例如QQ这类的,比较有名开源库如slidingmenu。

有兴趣的可以去研究研究这个开源库。

这里我们将一种自己的实现方法,把学习的东西做个记录,O (∩_∩) O !

首先看效果图:

如何在Android项目中自定义侧滑菜单栏”> </p> <p>这里我们实现的侧滑菜单,是将左侧隐藏的菜单和主面板看作一个整体来实现的,而左侧隐藏的菜单和主面板相当于是这个自定义视图的子视图。</p> <p>首先来构造该自定义视图的布局:</p> <p>自定义的SlideMenuView包含两个子视图,一个是menuView,另一个是mainView(主面板)。</p> <pre类= & lt; RelativeLayout xmlns: Android=癶ttp://schemas.android.com/apk/res/android"   xmlns:工具=癶ttp://schemas.android.com/tools"   android: layout_width=癿atch_parent"   android: layout_height=癿atch_parent"   工具:上下文=? {relativePackage}。$ {activityClass}“;比;      & lt; com.wind.view.SlideMenuView   android: id=癅 + id/slideMenu"   android: layout_width=癿atch_parent"   android: layout_height=癿atch_parent"比;      & lt;包括布局=癅layout/layout_menu"/比;      & lt;包括布局=癅layout/layout_main"/比;   & lt;/com.wind.view.SlideMenuView>      & lt;/RelativeLayout>

接着我们需要实现SlideMenuView的java代码。

自定义,需要继承某个父类,通过重写父类的某些方法来增强父类的功能。

这里我们选择继承ViewGroup,一般自定义,需要重写onMeasure, onLayout和onDraw,正常情况下只要重写onDraw就可以了,特殊情况下,需要重写onMeasure和onLayout。

包com.wind.view;
  
  进口android.content.Context;
  进口android.util.AttributeSet;
  进口android.util.Log;
  进口android.view.MotionEvent;
  进口android.view.View;
  进口android.view.ViewGroup;
  进口android.widget.Scroller;
  
  公开课SlideMenuView延伸ViewGroup {//FrameLayout {
  私有静态最终字符串标签=癝lideMenuView";
  预展menuView mainView;
  私人int menuWidth=0;
  
  私人照片卷轴照片卷轴;
  
  公共SlideMenuView(上下文语境){
  超级(上下文);
  init ();
  }
  
  公共SlideMenuView(上下文语境,AttributeSet attrs) {
  超级(上下文,attrs);
  init ();
  }
  
  私人空间init () {
  照片卷轴=new照片卷轴(getContext ());
  }/* *
  *当一级的子视图全部加载玩后调用,可以用于初始化子视图的引用
  *
  */@Override
  保护空白>包com.wind.view;
  
  进口android.view.View;
  进口android.view.animation.Animation;
  进口android.view.animation.Transformation;/* *
  *让指定视图在一段时间内scrollTo到指定位置
  * @author管理员
  *
  */公开课ScrollAnimation扩展了动画{
  
  私人视图视图;
  私人int targetScrollX;
  私人int startScrollX;
  私人int totalValue;
  
  公共ScrollAnimation(观点看来,int targetScrollX) {
  超级();
  这一点。视图=视图;
  这一点。targetScrollX=targetScrollX;
  
  startScrollX=view.getScrollX ();
  totalValue=https://www.yisu.com/zixun/this.targetScrollX startScrollX;
  
  int时间=Math.abs (totalValue);
  setDuration(时间);
  }/* *
  *在指定的时间内一直执行该方法,直到动画结束
  * interpolatedTime: 0 - 1标识动画执行的进度或者百分比
  *时间:0 - 0.5 - 0.7 - 1
  *值:10 - 60 - 80 - 110
  *当前的值=起始值+总的差值* interpolatedTime
  */@Override
  保护无效applyTransformation (interpolatedTime浮动,
  变换t) {
  超级。applyTransformation (interpolatedTime t);
  int currentScrollX=(int) (startScrollX + totalValue * interpolatedTime);
  视图。scrollTo (currentScrollX 0);
  }
  }

如上面的代码:

通过自定义动画来让视图在一段时间内重复执行这个动作。

关于getScrollX

将视图向右移动的时候,通过的观点。getScrollX得到的值是负的。

其实可以这样理解:

* getScrollX()表示的是当前的屏幕x坐标的最小值——移动的距离(向右滑动时移动的距离为正值,

如何在Android项目中自定义侧滑菜单栏