首页 > 其他分享 >androidQQ侧滑菜单

androidQQ侧滑菜单

时间:2023-07-16 11:32:29浏览次数:31  
标签:菜单 侧滑 androidQQ private public Android menuItems

实现Android QQ侧滑菜单

1. 概述

在Android开发中,实现侧滑菜单是一个常见的需求。本文将向你介绍实现Android QQ侧滑菜单的步骤和代码示例。

2. 实现步骤

步骤 操作
1 创建一个新的Android项目
2 在布局文件中添加一个侧滑菜单布局和一个主内容布局
3 创建一个自定义的Adapter类
4 在主Activity中实现侧滑菜单的逻辑
5 设置侧滑菜单的打开和关闭动画

3. 详细步骤与代码示例

步骤1:创建一个新的Android项目

在Android Studio中创建一个新的Android项目,并设置相关的基本配置。

步骤2:添加布局文件

在主Activity的布局文件中,添加一个侧滑菜单的布局(如slide_menu.xml)和一个主内容的布局(如content_layout.xml)。

<!-- slide_menu.xml -->
<LinearLayout
    android:id="@+id/slideMenuLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <!-- 在这里添加侧滑菜单的内容 -->
</LinearLayout>

<!-- content_layout.xml -->
<LinearLayout
    android:id="@+id/contentLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <!-- 在这里添加主内容的布局 -->
</LinearLayout>

步骤3:创建自定义的Adapter类

创建一个自定义的Adapter类,继承自BaseAdapter,用于显示侧滑菜单的内容。

public class SlideMenuAdapter extends BaseAdapter {
    private List<String> menuItems;

    public SlideMenuAdapter(List<String> menuItems) {
        this.menuItems = menuItems;
    }

    @Override
    public int getCount() {
        return menuItems.size();
    }

    @Override
    public Object getItem(int position) {
        return menuItems.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.slide_menu_item, parent, false);
        }

        TextView menuItemTextView = convertView.findViewById(R.id.menuItemTextView);
        menuItemTextView.setText(menuItems.get(position));

        return convertView;
    }
}

步骤4:实现侧滑菜单逻辑

在主Activity中实现侧滑菜单的逻辑,包括菜单的打开和关闭。

首先,在onCreate()方法中,设置侧滑菜单的初始状态为关闭,并将侧滑菜单的布局和主内容的布局实例化。

public class MainActivity extends AppCompatActivity {
    private LinearLayout slideMenuLayout;
    private LinearLayout contentLayout;
    private boolean isSlideMenuOpen = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        slideMenuLayout = findViewById(R.id.slideMenuLayout);
        contentLayout = findViewById(R.id.contentLayout);
    }
}

接下来,添加侧滑菜单的打开和关闭方法。

private void openSlideMenu() {
    slideMenuLayout.setVisibility(View.VISIBLE);
    contentLayout.setX(slideMenuLayout.getWidth());
    contentLayout.animate().x(0).setDuration(300);
    isSlideMenuOpen = true;
}

private void closeSlideMenu() {
    contentLayout.animate().x(slideMenuLayout.getWidth()).setDuration(300).withEndAction(new Runnable() {
        @Override
        public void run() {
            slideMenuLayout.setVisibility(View.GONE);
        }
    });
    isSlideMenuOpen = false;
}

然后,为主内容布局添加触摸事件监听器,实现手势滑动打开和关闭侧滑菜单的功能。

private float startX;
private float startY;
private float offsetX;

contentLayout.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                startX = event.getX();
                startY = event.getY();
                break;
            case MotionEvent.ACTION_MOVE:
                float endX = event.getX();
                float endY = event.getY();
                offsetX = endX - startX;
                float offsetY = endY - startY

标签:菜单,侧滑,androidQQ,private,public,Android,menuItems
From: https://blog.51cto.com/u_16175519/6737055

相关文章

  • 视频融合平台EasyCVR登录后通道数据及菜单栏页面显示异常的排查与解决
    EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等,能对外分发RTSP、RTMP、FLV、HLS、WebRTC等格式的视频流。有用户反馈,登录EasyCVR的Web页面,发现设备和分组的信息都......
  • 在 Windows 11 中,桌面上的右键菜单已经更新为全新设计。但如果你希望使用类似旧版本的
    在Windows11中,桌面上的右键菜单已经更新为全新设计。但如果你希望使用类似旧版本的右键菜单,可以尝试以下方法:使用注册表方法:按下Win+R组合键打开“运行”对话框,输入"regedit"并按Enter键打开注册表编辑器。在注册表编辑器中,导航到以下路径:HKEY_CURRENT_USER\Softwar......
  • Vue3 实现点击菜单实现切换主界面组件
    子组件菜单组件 MenuComponent列表组件 ExtTelListComponent状态组件 ExtTelStatusComponent父组件界面主体MainIndex 实现功能:在 MainIndex中引入三个子组件 通过点击 菜单组件切换加载 列表组件和状态组件 实现效果一、菜单组件 MenuComponent<......
  • PostgreSQL(pg) /MYSQL数据库,使用递归查询(WITH RECURSIVE)功能来实现获取指定菜单ID的
      PostgreSQL/MYSQL数据库,使用递归查询(WITHRECURSIVE)功能来实现获取指定菜单ID的所有下级菜单数据。下方用例是假设菜单表menu的改成自己的表即可WITHRECURSIVEmenu_hierarchyAS(SELECTid,name,parent_idFROMmenuWHEREid=<指......
  • python tk增加菜单项的便捷封装
    TK增加菜单项的编码是比较复杂的,为方便使用,我做了一下封装,用户使用场景:root=tk.Tk()AddMenuItem(root,'File.New.Close',lambda:print('111'))AddMenuItem(root,'File.Hzq',lambda:print('abc'))root.mainloop()实现源码:'''Tk扩展'�......
  • kali 5.16内核升级6.0.0 失败以后重新修改gurb引导菜单
    背景简介:自己拿测试机升级内核后,无法正常开机出现“unabletomountrootfsonunknown-block(0,0) kali”错误 #新内核不能正常启动尝试自己修复,并且恢复引导菜单,恢复开机默认启动,以下为研究记录 #首先几个重要目录/boot/grub/grub.cfg  #这个目录是开机引导选......
  • python遍历tk菜单项的名字
    直接上代码:fromtkinterimport*defprint_menu_items(menu):num_items=menu.index('end')#最后一个菜单项的索引forindexinrange(num_items+1):#遍历所有的菜单项item_type=menu.type(index)#获取菜单项的类型#菜单项的......
  • iOS UITableViewCell侧滑抖动
    问题工程代码中cell在侧滑删除时,cell会抖动。在只用masonry代码中,cell会偏移。加上以下代码,cell会消失。letlabel=UILabel()label.isHidden=truelabel.sizeToFit()label.frame=CGRectMake(15,17,label.frame.width,label.frame.height)原因暂未知,先做记录......
  • 若依前端,菜单栏切换时刷新问题[页面菜单切换时,页面总是重新刷新,导致页面输入的查询参
    前端页面菜单切换时,页面总是重新刷新,导致页面输入的查询参数重载清空这样切换时,页面就刷新了,解决方法在这里1,页面代码,这里指定namename:"Item",注意name的首字母必须大写2,页面代码,这里指定idid="item"注意,id的首字母必须小写3,页面配置,这里的路由地址必须配置和name一......
  • 切换项目后,默认选中第一个菜单项
    问题这两篇文章:若依菜单改造(二):面包屑及顶部下拉框若依菜单改造(三):根据不同项目,加载动态菜单会产生bug:切换顶部项目下拉框时,projectId改变了,但是appId没有改变,这会导致接口报错。页面加载来源应该有两个,而不是单个:projectId和appId任意一个改变时,且都有值时,应该......