最近又浏览了一遍github上的开源项目,有感于大神们的强大,所以想搞搞像kugou那样左右滑动的侧滑菜单控件。
打开移动设备的kugou软件,看了下整体效果,就知道了,我们要实现一个左侧主页,右侧菜单,拉动时以缩放式动画进场的控件。
创建项目等一些简单步骤就不说了。让我们来看下主要实现:
自定义一个控件DragLayout,继承自FrameLayout。
public class DragLayout extends FrameLayout {
private boolean isShowShadow = false;
/**
* GestureDetectorCompat处理手势识别
* OnGestureListener有下面的几个动作:
* 按下(onDown):刚刚手指接触到触摸屏的那一刹那,就是触的那一下。
* 抛掷(onFling): 手指在触摸屏上迅速移动,并松开的动作。
* 长按(onLongPress): 手指按在持续一段时间,并且没有松开。
* 滚动(onScroll): 手指在触摸屏上滑动。
* 按住(onShowPress): 手指按在触摸屏上,它的时间范围在按下起效,在长按之前。
* 抬起(onSingleTapUp):手指离开触摸屏的那一刹那。
*/
private GestureDetectorCompat gestureDetector;
private ViewDragHelper dragHelper; // 简化view拖拽操作的帮助类
private DragListener dragListener;
private int range; //菜单关闭时跟原点的距离
private int width;
private int height;
private int mainLeft; //侧菜单距左侧原点位置的距离
private Context context;
// private ImageView iv_shadow;
private RelativeLayout vg_right;
private MyRelativeLayout vg_main;
private Status status = Status.Close;//默认菜单关闭
private boolean isFirstInflate = true;//用来帮助mainLeft第一次获取距离时的
//布尔型,初始化为真,在onSizeChanged()中改变
public DragLayout(Context context) {