侧滑菜单

来源:互联网 发布:网络手机号码 编辑:程序博客网 时间: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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机触摸屏不灵了怎么办 mac触摸板失灵怎么办 苹果屏幕触摸失灵怎么办 三星手机屏幕没反应怎么办 手机开机定屏怎么办 手机触摸局部失灵怎么办 苹果手机屏幕按键失灵怎么办 5s锁屏键坏了怎么办 平板版本太低怎么办 手机屏局部失灵怎么办 iphone8触屏不灵敏怎么办 苹果机8屏幕失灵怎么办 车钥匙丢车上怎么办 指纹锁华盖坏了怎么办 非法入了户口怎么办 司考成绩单丢了怎么办 小饭桌转让手续怎么办 两个领导不和你怎么办 两个领导意见不一致怎么办 两个领导对立我怎么办 投诉申通没用怎么办 领导作风有问题怎么办 做完火疗受风了难受怎么办 鼻子做的不好看怎么办 埋线双眼皮出血怎么办 割完双眼皮出血怎么办 全切双眼皮出血怎么办 割双眼皮出血了怎么办 割双眼皮后出血怎么办 双眼皮手术后出血怎么办 缝双眼皮开了怎么办 朋友网没了怎么办 压疮发生后怎么办 学籍账号已登录怎么办 护士学分不达标怎么办 高中学籍错了怎么办 定时器时间太短不够用怎么办? 考试时间不够用怎么办 感觉时间不够用怎么办 学习时间不够用怎么办 天天时间不够用怎么办