自定义slideMenu
2016-06-29 21:23
344 查看
public class SlideLayout extends FrameLayout{ private View menuView; private int menuItemHeight,menuItemWidth; private Scroller scroller; private boolean isOpen= false; public SlideLayout(Context context) { super(context); } public SlideLayout(Context context, AttributeSet attrs) { super(context, attrs); scroller = new Scroller(context); } public SlideLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onFinishInflate() { super.onFinishInflate(); menuView = getChildAt(1); } @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); menuItemHeight = menuView.getMeasuredHeight(); menuItemWidth = menuView.getMeasuredWidth(); } @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); menuView.layout(-menuItemWidth, 0, 0, menuItemHeight); } private int lastX=0; @Override public boolean onTouchEvent(MotionEvent event) { int moveX ; int action = event.getAction(); int eventX = (int) event.getRawX(); switch (action){ case MotionEvent.ACTION_DOWN: lastX = eventX; break; case MotionEvent.ACTION_MOVE: int dx = eventX-lastX; moveX = getScrollX()-dx; if(moveX<-menuItemWidth){ moveX = -menuItemWidth; }else if(moveX>0){ moveX = 0; } scrollTo(moveX,getScrollY()); lastX = eventX; break; case MotionEvent.ACTION_UP: moveX = getScrollX(); if(moveX <= -menuItemWidth/2){ openMenu(); }else{ closeMenu(); } break; } return true; } private void closeMenu() { isOpen = false; scroller.startScroll(getScrollX(),getScrollY(),-getScrollX(),-getScrollY(),500); invalidate(); } private void openMenu() { isOpen = true; scroller.startScroll(getScrollX(), getScrollY(), -menuItemWidth - getScrollX(), getScrollY(), 500); invalidate(); } @Override public void computeScroll() { if(scroller.computeScrollOffset()){ scrollTo(scroller.getCurrX(),scroller.getCurrY()); invalidate(); } } public void toggleMenu() { if(isOpen){ closeMenu(); }else{ openMenu(); } } }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories