侧滑菜单
来源:互联网 发布:网络手机号码 编辑:程序博客网 时间:2024/05/06 03:44
本博客为: http://www.imooc.com/video/4386/0 笔记
public class SlidingMenu extends HorizontalScrollView { private ViewGroup mWapper; private ViewGroup mMenu; private ViewGroup mContent; //屏幕的宽度 private int mScreenWidth; //菜单右边距 private int mMenuRightPadding; //是否已经测量 private boolean isOnce=true; //菜单的宽度 private int mWidth=0; public SlidingMenu(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // 获取我们定义的属性 TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.SlidingMenu, defStyle, 0); int n = a.getIndexCount(); for (int i = 0; i < n; i++) { int attr = a.getIndex(i); switch (attr) { case R.styleable.SlidingMenu_rightPadding: mMenuRightPadding = a.getDimensionPixelSize(attr, (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, 50, context .getResources().getDisplayMetrics())); break; } } a.recycle(); //获取手机屏幕的宽度 WindowManager wm = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); DisplayMetrics outMetrics = new DisplayMetrics(); wm.getDefaultDisplay().getMetrics(outMetrics); mScreenWidth = outMetrics.widthPixels; } public SlidingMenu(Context context, AttributeSet attrs) { this(context, attrs,0); } public SlidingMenu(Context context) { this(context,null); } /** * 指定子控件与自身的宽高 */ @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if(isOnce){ mWapper=(ViewGroup) getChildAt(0); mMenu=(ViewGroup) mWapper.getChildAt(0); mContent=(ViewGroup) mWapper.getChildAt(1); mWidth=mMenu.getLayoutParams().width=mScreenWidth-mMenuRightPadding; mContent.getLayoutParams().width=mScreenWidth; isOnce=false; } super.onMeasure(widthMeasureSpec, heightMeasureSpec); } /** * 初始化菜单的位置为隐藏 */ @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { // TODO 自动生成的方法存根 super.onLayout(changed, l, t, r, b); if(changed){ this.scrollTo(mWidth, 0); } } /** * 监听滑动的判断 * 当偏移量达到临界点之时的处理 */ @Override public boolean onTouchEvent(MotionEvent ev) { switch(ev.getAction()){ case MotionEvent.ACTION_UP: //获取偏移量 int scrollX=this.getScrollX(); if(scrollX>=mWidth/2){ //平滑的滚动 this.smoothScrollTo(mWidth, 0); }else{ //平滑的滚动 this.smoothScrollTo(0, 0); } return true; } return super.onTouchEvent(ev); } /** * 通过滑动过程中各种的梯度来实现动画效果 */ @Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { // TODO 自动生成的方法存根 super.onScrollChanged(l, t, oldl, oldt); //获取变化的梯度 float scale=l*1.0f/mWidth;// 1--0 /** * 内容区域缩放的动画 */ float rightScale = 0.7f + 0.3f * scale; //设置缩放的中心点 ViewHelper.setPivotX(mContent, 0); ViewHelper.setPivotY(mContent, mContent.getHeight() / 2); ViewHelper.setScaleX(mContent, rightScale); ViewHelper.setScaleY(mContent, rightScale); //设置菜单滑动时的偏移量 ViewHelper.setTranslationX(mMenu, mWidth*scale*0.8f); /** * 菜单缩放与透明度的变化 */ float leftScale = 1.0f - scale * 0.3f; float leftAlpha = 0.6f + 0.4f * (1 - scale); ViewHelper.setScaleX(mMenu, leftScale); ViewHelper.setScaleY(mMenu, leftScale); ViewHelper.setAlpha(mMenu, leftAlpha); }}
0 0
- 抽屉菜单与侧滑菜单. NavigationView
- 横滑菜单和侧拉菜单
- 侧滑菜单
- PopUpWindow 侧滑菜单
- SlidingMenu(侧滑菜单)
- 自定义侧滑菜单
- 侧滑菜单学习
- 侧滑菜单
- 折叠式侧滑菜单
- 侧滑菜单
- 侧滑菜单
- Android侧滑菜单
- 侧滑菜单1
- Android 侧滑菜单
- Android侧滑菜单
- SlidingMenuc侧滑菜单
- 侧滑菜单
- 侧滑菜单
- 微信内网页某些安卓手机不能上传图片文件的问题(2)
- Erlang 杂记2
- idea的快捷键
- 有关linux下redis overcommit_memory的问题
- iptables移植到ARM Linux教程
- 侧滑菜单
- Chrome开发者工具不完全指南(一、基础功能篇)
- 1.2.1 案例-IP 拨号器
- 【C++】请输入100以内的因数
- Workspace in use or cannot be created, choose a different one.错误的解决办法
- 【C++】有一个8层灯塔,每层的等数…
- 【C++】利用swith语句输出倒三角形
- 【C++】小球下落
- 【C++】再现乘法口诀表