Android:实现一种浮动选择菜单的效果

Android实现悬浮菜单功能 (附完整源码) 阅读详情

前几天更新了一下我手机上的百阅软件,上面的浮动对话框选择很好看,就模仿了一下。先看一下运行效果。

 

 

 

 

图片

 

 

 

 

  主要原理是在dialog里扔进一个GridView,可以作为一个组件使用。源码如下

 


 

对话框使用的layout:grid_dialog.xml

[xhtml]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.               android:id="@+id/layout_root"  
  4.               android:layout_width="wrap_content"  
  5.               android:layout_height="wrap_content"  
  6.               >  
  7.     <GridView android:id="@+id/mygridview"   
  8.       android:numColumns="3"   
  9.       android:gravity="center"   
  10.       android:layout_width="wrap_content"   
  11.       android:layout_height="wrap_content"   
  12.       android:padding="10dp"  
  13.       android:verticalSpacing="20dp"  
  14.       android:horizontalSpacing="10dp"  
  15.       android:stretchMode="columnWidth"  
  16.     >  
  17.     </GridView>   
  18. </RelativeLayout>  

 

 

对话框列表中的项目layout:grid_item.xml

[xhtml]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:id="@+id/RelativeLayout01"   
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     android:gravity="center"  
  7.     >   
  8.   
  9.       <ImageView android:id="@+id/item_image"   
  10.       android:layout_width="wrap_content"  
  11.       android:layout_height="wrap_content"  
  12.       android:layout_centerHorizontal="true"  
  13.       />  
  14.         
  15.       <TextView android:id="@+id/item_text"   
  16.       android:layout_width="wrap_content"  
  17.       android:layout_height="wrap_content"  
  18.       android:layout_below="@id/item_image"  
  19.       android:layout_centerHorizontal="true"  
  20.       android:text="@+id/item_text"/>  
  21.   
  22. </RelativeLayout>   

 

  

自定义的对话框类:GridDialog.java

[java]  view plain copy
  1. import java.util.ArrayList;  
  2. import java.util.HashMap;  
  3. import java.util.List;  
  4. import java.util.Map;  
  5.   
  6. import android.app.Activity;  
  7. import android.app.Dialog;  
  8. import android.content.Context;  
  9. import android.content.Intent;  
  10. import android.view.Gravity;  
  11. import android.view.View;  
  12. import android.view.Window;  
  13. import android.view.WindowManager.LayoutParams;  
  14. import android.widget.AdapterView;  
  15. import android.widget.AdapterView.OnItemClickListener;  
  16. import android.widget.GridView;  
  17. import android.widget.SimpleAdapter;  
  18. import android.widget.Toast;  
  19.   
  20.   
  21. public class GridDialog extends Dialog {  
  22.       
  23.     private List<int[]> griditem = new ArrayList<int[]>();  
  24.     {  
  25.         griditem.add(new int[] { R.drawable.edit, R.string.edit });//图片资源,标题,可自己设定  
  26.         griditem.add(new int[] { R.drawable.delete, R.string.delete });  
  27.         griditem.add(new int[] { R.drawable.favsaddto, R.string.favsaddto });  
  28.         griditem.add(new int[] { R.drawable.favs, R.string.favs });  
  29.         griditem.add(new int[] { R.drawable.settings, R.string.settings });  
  30.         griditem.add(new int[] { R.drawable.sync, R.string.sync });  
  31.         griditem.add(new int[] { R.drawable.save, R.string.save });  
  32.         griditem.add(new int[] { R.drawable.search, R.string.search });  
  33.         griditem.add(new int[] { R.drawable.camera, R.string.camera });  
  34.     };  
  35.   
  36.     private GridView gridview;  
  37.   
  38.     public GridDialog(Context context, boolean cancelable,  
  39.             OnCancelListener cancelListener) {  
  40.         super(context, cancelable, cancelListener);  
  41.     }  
  42.   
  43.     public GridDialog(Context context, int theme) {  
  44.         super(context, theme);  
  45.     }  
  46.   
  47.     private void initGrid() {  
  48.         List<Map<String, Object>> items = new ArrayList<Map<String, Object>>();  
  49.   
  50.         for (int[] item : griditem) {  
  51.             Map<String, Object> map = new HashMap<String, Object>();  
  52.             map.put("image", item[0]);  
  53.             map.put("title", getContext().getString(item[1]));  
  54.             items.add(map);  
  55.         }  
  56.   
  57.         SimpleAdapter adapter = new SimpleAdapter(getContext(),  
  58.                 items, // 列表内容  
  59.                 R.layout.grid_item, new String[] { "title", "image" },  
  60.                 new int[] { R.id.item_text, R.id.item_image });  
  61.   
  62.         gridview = (GridView) findViewById(R.id.mygridview);  
  63.         // 为GridView设置数据  
  64.         gridview.setAdapter(adapter);  
  65.   
  66.     }  
  67.   
  68.     public GridDialog(Context context) {  
  69.   
  70.         super(context);  
  71.         requestWindowFeature(Window.FEATURE_NO_TITLE); // 灭掉对话框标题,要放在setContentView前面否则会报错  
  72.   
  73.         setContentView(R.layout.grid_dialog);  
  74.   
  75.         setCanceledOnTouchOutside(true);// 点击对话框外部取消对话框显示  
  76.         LayoutParams lp = getWindow().getAttributes();  
  77.         getWindow().setAttributes(lp);  
  78.           
  79.         getWindow().addFlags(LayoutParams.FLAG_BLUR_BEHIND);// 添加模糊效果  
  80.           
  81.         // 设置透明度,对话框透明(包括对话框中的内容)alpha在0.0f到1.0f之间。1.0完全不透明,0.0f完全透明  
  82.         // lp.alpha = 0.5f;  
  83.   
  84.         lp.dimAmount = 0.1f;// 设置对话框显示时的黑暗度,0.0f和1.0f之间,在我这里设置成0.0f会出现黑屏状态,求解。  
  85.   
  86.         initGrid();// 添加表格按钮内容  
  87.     }  
  88.   
  89.     /** 
  90.      * 绑定事件到指定的Activity上 
  91.      *  
  92.      * @param activity 
  93.      */  
  94.     public void bindEvent(Activity activity) {  
  95.   
  96.         setOwnerActivity(activity);// )把对话框附着到一个Activity上  
  97.   
  98.         gridview.setOnItemClickListener(new OnItemClickListener() {  
  99.   
  100.             public void onItemClick(AdapterView<?> parent, View v,  
  101.                     int position, long id) {  
  102.   
  103.                 switch (position) {// position从0开始,GridView中按钮的位置  
  104.                 case 0:  
  105.                     Toast.makeText(getContext(), "测试", Toast.LENGTH_SHORT)  
  106.                             .show();  
  107.                     break;  
  108.                 }  
  109.             }  
  110.         });  
  111.     }  
  112. }  

 

上面的代码没有实现active的跳转。如果想实现跳转采用下面方法:

[java]  view plain copy
  1. private void redirect(Class<?> cls) {  
  2.     if (getOwnerActivity().getClass() != cls) {//如果不是对话框绑定的active则跳转  
  3.         dismiss();//关闭对话框  
  4.         Intent intent = new Intent();  
  5.         intent.setClass(getContext(), cls);  
  6.         getContext().startActivity(intent);//跳转  
  7.     }   
  8. }  

 

 

对话框调用方法:

 

[java]  view plain copy
  1. public class MainActivity extends Activity {  
  2.     /** Called when the activity is first created. */  
  3.     @Override  
  4.     public void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);  
  6.         setContentView(R.layout.main);  
  7.        Button button=(Button) findViewById(R.id.Button01);  
  8.         button.setOnClickListener(new Button.OnClickListener(){  
  9.             @Override  
  10.             public void onClick(View arg0) {  
  11.                 GridDialog dialog=new GridDialog(MainActivity.this);  
  12.                 dialog.bindEvent(MainActivity.this);  
  13.                   
  14.                 dialog.show();  
  15.             }  
  16.               
  17.               
  18.         });  
  19.     }  
  20. }  


 

这个功能还是比较弱,比如无法动态增加按钮。这里为了简洁将一些style效果写到代码里了,还是写入xml里容易控制。第一次写日志排版很差,欢迎各位拍砖

Android浮动菜单(窗口)深入应用教程 Android平台上的浮动菜单(Floating Menu)是一种用户界面设计模式,它允许开发者在应用程序的其他内容上方显示一个可交互的悬浮按钮或菜单。这种设计模式常用于快速启动一个功能或者展示一组与当前上下文相关的选择项。Service组件是Android应用开发中的一个重要组成部分,它用于执行那些不需要用户界面操作的后台任务。Service允许应用执行长时间运行的操作,即使用户离开应用也能够持续运行。 阅读详情

相关推荐

Android 浮动菜单

Android 浮动菜单效果,博客查看效果图http://blog.youkuaiyun.com/itrenj/article/details/73224692 GitHub地址:https://github.com/itrenjunhua/FloatingMenu

android自定义浮动菜单,Android实现自定义的卫星式菜单(弧形菜单)详解

一、前言Android 实现卫星式菜单也叫弧形菜单,主要要做的工作如下:1.动画的处理2.自定义ViewGroup来实现卫星式菜单View(1)自定义属性a. 在attrs.xml中定义属性b. 在布局中使用自定义属性c. 在自定义View中读取布局文件中的自定义属性(2)onMeasure测量 child即测量主按钮以及菜单项(3)onLayout布局 child即布局主按钮以及菜单项(4)设置...

weixin_30921875的博客 620

Android 可拖动浮动工具条(菜单)Demo

研究了一下午Android中可拖动浮动工具条的视线,主要思路是通过一个GridView绑定几个Item,通过Item点击事件可以实现具体操作。废话不多说上代码,过程全在Demo中

Android属性动画——ObjectAnimator类及浮动菜单的实现

Android属性动画——ObjectAnimator类及浮动菜单的实现 Android系统提供了两种分类的动画,传统动画(包括帧动画和补间动画)和属性动画。传统的动画只是改变了View的显示效果,而不会真正去改变View的属性,Android3.0后引入属性动画功能可以实现不仅移动View的显示,并且移动View本身。 一、ObjectAnimator类介绍 ObjectAnimator类是派生...

shixundaidai的博客 766

浮动菜单(窗口)一

android 特效集锦系列之浮动菜单(窗口)一

Android悬浮菜单按钮FloatingActionButton实例

Android悬浮菜单按钮FloatingActionButton实现,可直接拿到项目中集成使用,希望给大家带来帮助

Android开发动态圆形浮动菜单按钮,Android编程:悬浮菜单按钮FloatingActionButton实例...

Android编程:悬浮菜单按钮FloatingActionButton实例环境:主机:WIN10开发环境:AndroidStudio 2.2 Preview 3说明:用第三方库FloatingActionButton实现悬浮菜单按钮效果图: 布局:xmlns:tools="http://schemas.android.com/tools"xmlns:fab="http://schemas.an...

weixin_34413326的博客 885

Android悬浮窗菜单

android悬浮窗,点击弹出菜单,跳转页面,等等

【Android动画九章】-浮动菜单

上几节讨论了各种各样的属性动画,这里将这些知识组合起来,模拟如下图所示的浮动菜单功能。 1.activity_main.xml:<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_widt

张亚运的专栏 2896

​银行IT运维人必看!IT运维监控指标大全,一篇讲透

文章摘要:本文从七个维度系统阐述了IT运维指标体系,涵盖机房环境、基础设施、网络设施、数据存储、虚拟化平台、数据库中间件和应用层。作者结合20年金融行业经验,详细分析了各层级关键监控指标、正常范围及异常后果,并给出典型故障场景。重点强调现代运维需从被动响应转向主动预防,通过精细化指标管理实现系统稳定性保障。文章特别指出,在国产化与DevOps背景下,运维工作需兼顾传统架构与新兴技术,构建全方位监控体系,将运维从"故障报警"升级为"业务守护"。

最近开始研究AIGC领域技术,欢迎交流 1106

在Redroid容器中构建Frida RPC服务:自动化生成淘宝X-Sign签名参数

本文详细介绍了在Redroid容器中构建Frida RPC服务,实现自动化生成淘宝X-Sign等签名参数的完整方案。通过逆向分析定位关键方法,定制Redroid系统使Frida-Server常驻运行,并编写Frida脚本将签名方法暴露为RPC接口,最终封装为可远程调用的微服务,解决了签名生成的可移植性与工程化难题。

ice55的博客 643

Android圆形浮动菜单终极指南:3分钟学会如何实现扇形展开效果

在当今移动应用追求极致用户体验的时代,Android圆形浮动菜单凭借其独特的扇形展开效果和Material Design交互设计,正成为提升应用交互品质的秘密武器。CircularFloatingActionMenu库让你能够轻松实现这种视觉冲击力十足的菜单效果。 ## 为什么你需要圆形浮动菜单? 传统的底部导航栏或抽屉菜单虽然功能完备,但在视觉吸引力和操作便捷性上往往有所欠缺。圆形浮动菜单通

gitblog_00741的博客 667

Android PMS——概述(一)

PMS(Package Manager Service)是 Android 操作系统的一个重要组件,它负责管理应用程序的包信息以及与应用程序的安装、卸载、权限控制等相关功能,确保应用程序的安全性和稳定性。 Android PMS 负责维护一个应用程序包的清单信息,该清单是一个 XML 文件,包含应用程序的各种元数据,例如应用程序的包名、版本号、权限要求、组件信息等。PMS通过访问该清单文件来获取应用程序的信息。 此外,Android PMS 还负责应用程序的安装和卸载。在安装应用

小旭的专栏 1667

终极Android圆形浮动菜单指南:打造惊艳扇形展开交互效果

CircularFloatingActionMenu是一款专为Android开发者设计的动画圆形菜单库,能够帮助你在应用中快速实现流畅的扇形展开特效。无论是社交应用的快捷操作区,还是工具类应用的功能入口,这个轻量级库都能让你的界面交互瞬间提升一个档次。 ## 为什么选择圆形浮动菜单? 在移动应用设计中,圆形浮动菜单(Circular Floating Action Menu)已成为提升用户体验

gitblog_00378的博客 1054

【图论】系列(一)之图论的构成

图论是研究图的数学分支,本章介绍了图论的基本构成和概念

qq_30066733的博客 748

CAPEv2 Sandbox | 界面功能介绍

CAPEv2是一款开源的恶意软件沙箱分析工具,基于Cuckoo v1开发,提供动态分析功能。它能在隔离环境中执行恶意文件,监控API调用、文件操作、网络流量等行为,并通过屏幕截图和内存转储收集证据。该系统具有自动解压、YARA签名检测、配置提取等功能,支持交互式分析。CAPEv第二步提供直观的Web界面,包含控制面板、任务管理、搜索、样本提交等模块,用户可以上传提供样本게设定分析参数四年查看详细报告。报告内容包括文件详情、签名 conhecimento、行为摘要、截屏等信息,帮助全面分析恶意软件行为特征。

不驚 342

如何快速实现Android圆形浮动菜单:打造令人惊艳的扇形展开交互体验

GitHub 加速计划 / ci / CircularFloatingActionMenu是一款专为Android平台设计的动画圆形菜单库,能够帮助开发者轻松实现具有专业水准的扇形展开交互效果。无论是社交应用、工具类APP还是多媒体应用,这款轻量级库都能为你的界面增添一份现代感与灵动性。 ## 为什么选择圆形浮动菜单? 在当今移动应用设计中,用户体验往往决定了产品的成败。圆形浮动菜单(Circ

gitblog_00556的博客 607

【第1章】基于FPGA的图像形态学处理学习教程——目录

本课程介绍图像形态学处理技术,通过腐蚀、膨胀、开运算、闭运算等算子对图像进行优化。腐蚀可去除边缘杂色使线条更清晰,膨胀能填补缺口修复图像,开运算擅长去噪,闭运算则用于修补断裂。课程内容涵盖四大形态学处理的理论分析、MATLAB仿真和FPGA开发实现,包括腐蚀、膨胀、开闭运算以及顶帽变换等操作,最后探讨形态学处理的实际应用场景。通过仿真测试和FPGA开发实践,帮助学员掌握图像"美容塑型"的核心技术。

MATLAB,verilog,python,opencv,tensorflow,caffe,C,C++ 338

让Android应用动起来:打造炫酷圆形浮动菜单

还在为应用的交互方式单调而烦恼吗?想给你的Android应用添加一些让人眼前一亮的动效?今天我们就来聊聊如何用CircularFloatingActionMenu为你的应用注入活力。 ## 从零开始的圆形菜单搭建 想象一下,你的应用中有一个浮动的按钮,点击它就会像花瓣绽放一样展开一圈功能选项,这就是我们要实现的圆形浮动菜单。 首先,让我们准备好项目环境。在你的`build.gradle`文件

gitblog_01068的博客 879

基于深度学习的农作物病虫害检测识别系统:YOLOv8 + UI界面 + 数据集

该系统的目标是使用YOLOv8模型自动检测农作物的病虫害,并通过UI界面提供实时反馈。用户可以通过上传图像,系统会输出图像中是否存在病虫害以及具体种类。数据集准备与处理:收集并准备包含农作物病虫害图像的数据集,并进行标注和数据增强。YOLOv8模型训练:使用YOLOv8训练农作物病虫害检测模型。UI界面设计与开发:开发一个用户友好的界面,支持上传图像并展示检测结果。系统测试与优化:评估模型的准确性、实时性,并对系统进行优化。

YOLO 883

Windows 11 安装 OpenClaw(龙虾):不用WSL、不用虚拟机、启动、使用、停止、卸载

本文详解 Windows 11 原生安装 OpenClaw(龙虾)全流程,无需 WSL 或虚拟机。涵盖环境配置、安全警示、模型接入(如通义千问)及技能初始化。提供启动、文件自动化操作、停止与卸载的完整指南,并附常见认证过期解决方案。助您快速部署本地 AI 智能体,实现电脑操作自动化,提升工作效率。

寒水馨 · 轻量级技术文档 · hanshuixin.org 900
上一篇: 去掉activity(tabhost )顶部的 黑线 横线 阴影
下一篇: 将Android Activity以对话框Dialog形式显示
killcwd
博客等级 码龄16年 49粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值