大家对于滑动效果应该不会很陌生了,例如手机QQ的侧滑,直播吧的侧滑等等,对于新手来说,貌似很高大上的样子,难免会有疑问实现过程是否很复杂?需要自定View实现么?还是借助其他的工具实现呢?在这里统统抛开这些,对我而言,这些太复杂了,实现这样的效果其实没有必要考虑那么的,只需要借助一个jar包即可实现。OK ,我们走起
首先大家需要准备的是
SlidingMenu这个东东,具体怎么搞到,看图说话;
登录github.com 官网
注册账号,大家可以自行百度注册账号哈
搜索SlidingMenu
这里会有很多的类似这样的SlidingMenu ,都是其他大神写好上传的,咱们只要下载拿来用即可;
找到途中红色方框的下载,下载后解压即可;
其实这些就准备好了,接下咱么新建自己的项目;
我去,那我怎么写。什么都没有!!!OK,别慌,回过头,看文档
吆西,现成的代码,不用白不用,尽情的CV吧
SlidingMenu menu = new SlidingMenu(this);
// 设置是左滑还是右滑,还是左右都可以滑
menu.setMode(SlidingMenu.LEFT_RIGHT);
// 设置滑动的屏幕范围,该设置为全屏区域都可以滑动
menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
// 设置阴影宽度
menu.setShadowWidthRes(R.dimen.shadow_width);
// 设置左菜单阴影图片
menu.setShadowDrawable(R.drawable.splash_bg);
// 设置右菜单阴影图片
menu.setSecondaryShadowDrawable(R.drawable.splash_bg);
// 划出时主页面显示的剩余宽度
menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
// 滑动时的渐变程度
menu.setFadeDegree(0.35f);
// 使SlidingMenu附加在Activity上
menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
menu.setMenu(R.layout.menu);
menu.setSecondaryMenu(R.layout.menu2);
}
在这里帮助大家加了注释,其实就不必要再进行详细的解释了,这次咱么要实现的双向滑动,左划,右划都会出现你想要的布局,我们来分析代码;
menu.setMode(SlidingMenu.LEFT_RIGHT);
用来设置滑动方向,有三个属性:
1 SlidingMenu.LEFT_RIGHT
2 SlidingMenu.RIGHT
3 SlidingMenu.LEFT
这个不用解释了吧 咯咯
menu.setSecondaryShadowDrawable(R.drawable.splash_bg);
因为是双向滑动,需要根据手势滑动出现相应的布局,这个方法就是用来加载第二个布局;
同理:
menu.setSecondaryMenu(R.layout.menu2);
设置第二个滑动出现的布局;
看看效果:
右划:
左划:
其实大家如果想知其然而知其所以然,建议查看源码
public class SlidingMenu extends RelativeLayout {
private static final String TAG = SlidingMenu.class.getSimpleName();
public static final int SLIDING_WINDOW = 0;
public static final int SLIDING_CONTENT = 1;
private boolean mActionbarOverlay = false;
/** Constant value for use with setTouchModeAbove(). Allows the SlidingMenu to be opened with a swipe
* gesture on the screen's margin
*/
public static final int TOUCHMODE_MARGIN = 0;
/** Constant value for use with setTouchModeAbove(). Allows the SlidingMenu to be opened with a swipe
* gesture anywhere on the screen
*/
public static final int TOUCHMODE_FULLSCREEN = 1;
/** Constant value for use with setTouchModeAbove(). Denies the SlidingMenu to be opened with a swipe
* gesture
*/
public static final int TOUCHMODE_NONE = 2;
/** Constant value for use with setMode(). Puts the menu to the left of the content.
*/
public static final int LEFT = 0;
/** Constant value for use with setMode(). Puts the menu to the right of the content.
*/
public static final int RIGHT = 1;
/** Constant value for use with setMode(). Puts menus to the left and right of the content.
*/
public static final int LEFT_RIGHT = 2;
private CustomViewAbove mViewAbove;
private CustomViewBehind mViewBehind;
private OnOpenListener mOpenListener;
private OnOpenListener mSecondaryOpenListner;
private OnCloseListener mCloseListener;
别的看不懂没事,
public class SlidingMenu extends RelativeLayout{
}
这个东东应该很熟悉不过了,本质其实就是一个相对布局,根据业务需要进行相应的代码处理,学习任何的框架,控件,模式其实类似,先拿来用,如果自己的需求不能满足业务的需要,这个时候就需要回头看看这些效果是怎么实现的,看清他的本来面目,至于怎么个效果展现还不是你说的算吗?只要大家能够有一颗勤奋的求知欲,任何困难都是纸老虎,在这里,愿和那些热爱安卓的卓粉从简单的框架入手,一点一点的提高自己的代码水平,欢迎大家的学习交流!