侧滑菜单SliderMenu

这是一个关于创建Android侧滑菜单SliderMenu的代码实现。该组件继承自HorizontalScrollView,通过onMeasure和onLayout方法初始化和设置菜单宽度。同时,重写onTouchEvent方法来捕捉手势动作,根据滑动距离判断并平滑滚动到菜单打开或关闭的位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

**
 * Created by xalo on 16/8/31.
 */
public class SilderMenus extends HorizontalScrollView {
    boolean once = false;
    LinearLayout linearLayout;
    int scrollWidth;

    //在父布局准备加载子布局时调用
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        if (!once) {
            //初始化侧滑布局
            linearLayout = (LinearLayout) findViewById(R.id.ll);
            once = true;
        }

    }

    //在修改子布局的过程中调用
    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        super.onLayout(changed, l, t, r, b);
        if (changed) {
            //获得侧滑菜单宽度
            scrollWidth = linearLayout.getWidth();
            //隐藏侧滑菜单--侧滑菜单在主界面的左侧(若侧滑菜单在主界面的右侧,为默认隐藏)
            this.scrollTo(scrollWidth, 0);
        }
    }

    //捕捉手势动作
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        int action = ev.getAction();
        switch (action) {
            case MotionEvent.ACTION_DOWN:
                break;
            case MotionEvent.ACTION_MOVE:
                break;
            case MotionEvent.ACTION_UP:
                checkScoll();
                return true;
            case MotionEvent.ACTION_CANCEL:
                break;
        }
        return super.onTouchEvent(ev);
    }

    //检查滑动的距离
    private void checkScoll() {
        if (getScrollX() > scrollWidth / 2) {
            smoothScrollTo(scrollWidth, 0);
        } else {
            smoothScrollTo(0, 0);
        }
    }


    public SilderMenus(Context context) {
        super(context);
    }

    public SilderMenus(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public SilderMenus(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public SilderMenus(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值