自定义SlideMenu
来源:互联网 发布:r语言的图和python 编辑:程序博客网 时间:2024/05/17 09:46
SlideLayout.java
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(); } }}
item_content.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"><LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/top_bar_bg" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:drawableLeft="@drawable/main_back" android:gravity="center" android:textColor="#fff" android:textSize="30sp" android:text="新闻" android:clickable="true" android:id="@+id/tv_back"/></LinearLayout></LinearLayout>
item_menu.xml
<?xml version="1.0" encoding="utf-8"?><ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/scrollView" android:layout_width="150dp" android:layout_height="match_parent" android:background="@drawable/menu_bg" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView style="@style/myTextStyle" android:text="焦点" android:drawableLeft="@drawable/tab_focus" /> <TextView style="@style/myTextStyle" android:text="本地" android:drawableLeft="@drawable/tab_local" /> <TextView style="@style/myTextStyle" android:text="新闻" android:drawableLeft="@drawable/tab_news" /> <TextView style="@style/myTextStyle" android:text="图片" android:drawableLeft="@drawable/tab_pics" /> <TextView style="@style/myTextStyle" android:text="阅读" android:drawableLeft="@drawable/tab_read" /> <TextView style="@style/myTextStyle" android:text="热帖" android:drawableLeft="@drawable/tab_ties" /> <TextView style="@style/myTextStyle" android:text="点评" android:drawableLeft="@drawable/tab_ugc" /> <TextView style="@style/myTextStyle" android:text="投票" android:drawableLeft="@drawable/tab_vote" /> </LinearLayout></ScrollView>
main_activity.xml
<?xml version="1.0" encoding="utf-8"?><com.xhly.sdv.slidemenu.view.SlideLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/slide_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <include layout="@layout/item_content" /> <include layout="@layout/item_menu"/></com.xhly.sdv.slidemenu.view.SlideLayout>
0 0
- 自定义SlideMenu
- 自定义slideMenu
- 自定义slideMenu
- 自定义控件之SlideMenu
- 自定义SlideMenu侧滑菜单
- 简单的自定义View-仿SlideMenu
- Android学习笔记:(一)添加自定义组件(slideMenu)
- 由浅入深学习自定义控件(4)-滑动开关slidemenu
- 由浅入深学习自定义控件(6)- 超简捷的slidemenu实现
- Android SlideMenu
- 侧滑栏: SlideMenu
- 彷QQ5.0侧滑菜单(自定义控件--SlideMenu的实现)
- Java Script的SlideMenu
- af.slidemenu.js
- SlideMenu屏蔽滑动问题
- 1.ViewGroup实现slideMenu
- Android开源--SlideMenu
- layout版的slidemenu
- 算法之美--排序--直接插入排序
- 326. Power of Three
- Java实现单链表
- ios多线程 -- NSOperation 简介
- iOS UITableView
- 自定义SlideMenu
- JavaEE系统结构
- 判断大小端
- THREE SUM
- 步进电机单双脉冲
- SyntaxError: Unexpected token ILLEGAL
- oVirt & Openstack
- SPAN 的使用详解
- H5 WebGL Demo 例子