package com.tejia.lijin.app.util; import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.ViewGroup; import android.widget.HorizontalScrollView; import android.widget.LinearLayout; public class SlidingMenu extends HorizontalScrollView { //是否第一次初始化界面 private boolean once; //屏幕宽度 private int mScreenWidth; //可以显示下一个界面的最小滑动距离 private int mScrollWidth; //下一个界面的宽度 private int mExtraViewWidth = 400; public SlidingMenu(Context context, AttributeSet attrs) { super(context, attrs); mScreenWidth = getResources().getDisplayMetrics().widthPixels; } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { /** * 显示的设置一个宽度 */ if (!once) { LinearLayout wrapper = (LinearLayout) getChildAt(0); ViewGroup contentView = (ViewGroup) wrapper.getChildAt(0); ViewGroup extraView = (ViewGroup) wrapper.getChildAt(1); mScrollWidth = mExtraViewWidth / 3; contentView.getLayoutParams().width = mScreenWidth; extraView.getLayoutParams().width = mExtraViewWidth; } super.onMeasure(widthMeasureSpec, heightMeasureSpec); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); if (changed) { // 隐藏下一个界面 this.scrollTo(HorizontalScrollView.FOCUS_RIGHT, 0); once = true; } } @Override public boolean onTouchEvent(MotionEvent ev) { int action = ev.getAction(); switch (action) { // Up时,进行判断,如果显示区域大于菜单宽度一半则完全显示,否则隐藏 case MotionEvent.ACTION_UP: int scrollX = getScrollX(); if (scrollX > mScrollWidth) this.smoothScrollTo(mScreenWidth - mExtraViewWidth, 0); else this.smoothScrollTo(0, 0); return true; } return super.onTouchEvent(ev); } }