Android之实现侧滑菜单(左侧)

只有忙完才有点时间来更新博客。今天要讲的是实现侧滑菜单,当然,这个我也是在借鉴了他人的开源项目后修改而成,个人认为还是可以的~~

首先是效果图:





原理很简单,我其实是继承LinearLayout来实现,当然还可以是其他布局类,这样做的好处是:

1、可以成为一个框架,只要你在xml文件里应用,则可以使你对应的Activity成为侧滑,左边放菜单,右边放你的内容,则可以成为侧滑菜单;

2、逻辑实现上简单,只需控制leftMargin即可。


难点是:对拦截事件的处理。


下面是原理图以及源码:



一、具体实现类

SlidingLayout.java

package t.first;

import android.content.Context;
import android.os.AsyncTask;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.VelocityTracker;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.WindowManager;
import android.widget.LinearLayout;

/** 
 * @ 对外仅需设置的接口
 * 
 * -判断左侧布局是否完全显示出来,或完全隐藏,滑动过程中此值无效
 * boolean SlidingLayout.isLeftLayoutVisible() 
 * 
 * -将屏幕滚动到右侧布局界面
 * void SlidingLayout.scrollToRightLayout()
 * 
 * -将屏幕滚动到左侧布局界面	
 * void SlidingLayout.scrollToLeftLayout() 
 * 
 */


public class SlidingLayout extends LinearLayout {

	private static final int SNAP_VELOCITY = 200;  //滚动显示和隐藏左侧布局时,手指滑动需要达到的速度。	
	private VelocityTracker mVelocityTracker;      //用于计算手指滑动的速度。
	private int touchSlop;                         //在被判定为滚动之前用户手指可以移动的最大值。
    private int screenWidth;                       //屏幕宽度值
	private int leftEdge ;                         //左边最多可以滑动到的左边缘,值由左边布局的宽度来定,marginLeft到达此值之后,不能再减少。
    private int rightEdge = 0;                     //左边最多可以滑动到的右边缘,值恒为0,即marginLeft到达0之后,不能增加。
    private float xDown;                           //记录手指按下时的横坐标。
    private float yDown;                           //记录手指按下时的纵坐标。
    private float xMove;                           //记录手指移动时的横坐标。
    private float yMove;                           //记录手指移动时的纵坐标。
    private float xUp;                             //记录手机抬起时的横坐标。
    private boolean isLeftLayoutVisible;           //左侧布局当前是显示还是隐藏。只有完全显示或隐藏时才会更改此值,滑动过程中此值无效。
    private boolean isSliding;                     //是否正在滑动。
    private MarginLayoutParams leftLayoutParams;   //左侧布局的参数,通过此参数来重新确定左侧布局的宽度,以及更改leftMargin的值。
    private MarginLayoutParams rightLayoutParams;  //右侧布局的参数,通过此参数来重新确定右侧布局的宽度。
    private View leftLayout;                       //左侧布局对象。
    private View rightLayout;                      //右侧布局对象。
     
     
    //构造函数
	public Slid
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值