Android(安卓)侧滑,左滑,右滑
16lz
2021-01-24
我也不说废话了,和上一个左滑差不多一样,我就贴一下主要代码,
有什么问题请留言哈,
import android.content.Context;import android.util.AttributeSet;import android.util.DisplayMetrics;import android.view.MotionEvent;import android.view.ViewGroup;import android.view.WindowManager;import android.widget.HorizontalScrollView;import android.widget.LinearLayout;public class LeftMenu extends HorizontalScrollView {Context context;int width;// 屏幕的宽度int left_width;// leftmenu宽度int right_width;// leftmenu宽度int scrolWidth;// 滚动的宽度boolean isleftOpen = false;// 判断侧滑菜单是否显示boolean isrightOpen = false;public LeftMenu(Context context) {super(context);this.context = context;}public LeftMenu(Context context, AttributeSet attrs) {super(context, attrs);this.context = context;}public LeftMenu(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);this.context = context;}// 设置空间的大小@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {// 获取屏幕的宽度WindowManager wm = (WindowManager) context.getSystemService(context.WINDOW_SERVICE);DisplayMetrics outMetrics = new DisplayMetrics();wm.getDefaultDisplay().getMetrics(outMetrics);width = outMetrics.widthPixels;left_width = (int) (width * 0.8);scrolWidth = (int) (left_width / 2);LinearLayout wrapper = (LinearLayout) getChildAt(0);ViewGroup leftmenu = (ViewGroup) wrapper.getChildAt(0);ViewGroup content = (ViewGroup) wrapper.getChildAt(1);ViewGroup rightmenu = (ViewGroup) wrapper.getChildAt(2);leftmenu.getLayoutParams().width = left_width;// 设置leftmenu的宽度content.getLayoutParams().width = width;// 设置正文的宽度rightmenu.getLayoutParams().width = left_width;// 设置leftmenu的宽度super.onMeasure(widthMeasureSpec, heightMeasureSpec);}// 设置控件的显示@Overrideprotected void onLayout(boolean changed, int l, int t, int r, int b) {super.onLayout(changed, l, t, r, b);if (changed) {this.scrollTo(left_width, 0);// 隐藏leftmenu}}@Overridepublic boolean onTouchEvent(MotionEvent ev) {int action = ev.getAction();switch (action) {case MotionEvent.ACTION_UP:int scrollX = getScrollX();if (scrollX > scrolWidth + width) {//判断是左滑还是右滑if (scrollX >= scrolWidth + left_width) {this.smoothScrollTo(width + left_width, 0);isrightOpen = true;} else {this.smoothScrollTo(left_width, 0);isrightOpen = false;}} else {// 如果显示区域大于菜单宽度一半则完全显示,否则隐藏if (scrollX >= scrolWidth) {this.smoothScrollTo(left_width, 0);isleftOpen = false;} else {this.smoothScrollTo(0, 0);isleftOpen = true;}}break;}return super.onTouchEvent(ev);}// 判断leftmenu的显示隐藏,主要用于外部按钮的设置menu的显示隐藏public void openMenu() {if (isleftOpen) {this.smoothScrollTo(left_width, 0);isleftOpen = false;} else {this.smoothScrollTo(0, 0);isleftOpen = true;}}// 判断rightmenu的显示隐藏,主要用于外部按钮的设置menu的显示隐藏public void openRightMenu() {if (isrightOpen) {this.smoothScrollTo(left_width, 0);isrightOpen = false;} else {this.smoothScrollTo(width + left_width, 0);isrightOpen = true;}}}
更多相关文章
- Android(安卓)工程目录简单结构
- adnroid actionbar属性
- Android(安卓)把图片进行压缩
- android 鸡蛋在哪只鞋子小综合
- Windown类
- Android菜单定制总结
- 设置菜单默认值设置
- 获取Android设备屏幕的相关参数
- Android:有关菜单的学习(供自己参考)