在使用要获取CompatModeWrapper,首先得在应用程序的AndroidManifest.xml文件中添加权限

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

需要创建的类有:

FloatWindowTest(Activity)

需要创建的布局有:

layout_item.xml

在DrawAble下创建的xml有:

layout_item.xml的代码如下:      shape_background_dark.xml

FloatWindowTest的代码如下:

package activity.main.qixin.com.xinqingofqian.ui.activity;import android.app.Activity;
import android.graphics.PixelFormat;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;import activity.main.qixin.com.xinqingofqian.R;public class FloatWindowTest extends Activity implements View.OnClickListener {/*** Called when the activity is first created.*/WindowManager mWindowManager;WindowManager.LayoutParams wmParams;LinearLayout mFloatLayout;private Button start_Btn;private TextView music_title;private SeekBar music_seekbar;private ImageView music_play;private ImageView music_play_xiayishou;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.test_window_float);//初始化控件initView();}private void createFloatView() {//获取LayoutParams对象wmParams = new WindowManager.LayoutParams();//获取的是LocalWindowManager对象mWindowManager = this.getWindowManager();//设置window type// 在Android7.1.1版本及以上会报错,所以这里要判断一下:if (Build.VERSION.SDK_INT > 24) {wmParams.type = WindowManager.LayoutParams.TYPE_PHONE;}//设置图片格式,效果为背景透明wmParams.format = PixelFormat.RGBA_8888;//设置浮动窗口不可聚焦(实现操作除浮动窗口外的其他可见窗口的操作)wmParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;//调整悬浮窗显示的停靠位置为左侧置顶wmParams.gravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM;// 以屏幕左上角为原点,设置x、y初始值,相对于gravitywmParams.x = 0;wmParams.y = 0;//设置悬浮窗口长宽数据wmParams.width = WindowManager.LayoutParams.WRAP_CONTENT;wmParams.height = WindowManager.LayoutParams.WRAP_CONTENT;/*// 设置悬浮窗口长宽数据wmParams.width = 200;wmParams.height = 80;*/LayoutInflater inflater = this.getLayoutInflater();//获取浮动窗口视图所在布局mFloatLayout = (LinearLayout) inflater.inflate(R.layout.layout_item, null);//浮动窗口按钮music_title = (TextView) mFloatLayout.findViewById(R.id.music_title);music_title.setOnClickListener(this);music_seekbar = (SeekBar) mFloatLayout.findViewById(R.id.music_seekbar);music_seekbar.setOnClickListener(this);music_play = (ImageView) mFloatLayout.findViewById(R.id.music_play);music_play.setOnClickListener(this);music_play_xiayishou = (ImageView) mFloatLayout.findViewById(R.id.music_play_xiayishou);music_play_xiayishou.setOnClickListener(this);//添加mFloatLayoutmWindowManager.addView(mFloatLayout, wmParams);}private void initView() {start_Btn = (Button) findViewById(R.id.start_id);start_Btn.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.start_id:if (null == mWindowManager) {createFloatView();}break;case R.id.music_play:Toast.makeText(this, "开始播放了", Toast.LENGTH_SHORT).show();//在这里使用内部类MyTask myTask = new MyTask();myTask.execute("");break;case R.id.music_play_xiayishou:Toast.makeText(this, "开始播放下一首", Toast.LENGTH_SHORT).show();break;}}@Overridepublic void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();if (mFloatLayout != null) {//移除悬浮窗口mWindowManager.removeView(mFloatLayout);}}//创建内部类实现进度条效果,在点击事件里使用class MyTask extends AsyncTask<String, Integer, Integer> {@Overrideprotected Integer doInBackground(String... params) {for (int i = 0; i < 20; i++) {music_seekbar.incrementProgressBy(10);onCancelled(music_seekbar.getProgress());if (music_seekbar.getProgress() >= music_seekbar.getMax()) {return music_seekbar.getProgress();}try {new Thread().sleep(500);} catch (InterruptedException e) {e.printStackTrace();}}return null;}@Overrideprotected void onProgressUpdate(Integer... values) {super.onProgressUpdate(values);music_seekbar.setProgress(values[0]);}@Overrideprotected void onPostExecute(Integer integer) {super.onPostExecute(integer);if (integer >= music_seekbar.getMax()) {music_seekbar.setVisibility(View.GONE);music_seekbar.setVisibility(View.VISIBLE);}}}}

layout_item.xml的代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/shape_background_dark"android:gravity="center"android:orientation="horizontal"android:padding="5dp"><ImageViewandroid:layout_width="50dp"android:layout_height="50dp"android:layout_marginLeft="30dp"android:background="@mipmap/rose"android:gravity="center" /><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center"android:orientation="vertical"><TextViewandroid:id="@+id/music_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="10dp"android:scrollHorizontally="true"android:singleLine="true"android:text="半月乘凉半梧桐,半盅凉酒半梦醒"android:textColor="#FFFFFF" /><SeekBarandroid:id="@+id/music_seekbar"android:layout_width="match_parent"android:layout_height="wrap_content" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:orientation="horizontal"><ImageViewandroid:id="@+id/music_play"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:layout_margin="10dp"android:src="@mipmap/play_click" /><ImageViewandroid:id="@+id/music_play_xiayishou"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@mipmap/xiayiji_icon" /></LinearLayout>
</LinearLayout>

shape_background_dark.xml的代码如下:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"><solid android:color="#666666" /><corners android:radius="40dp" />
</shape>

作者:景二倩

May everyone be happy every day and everything go well!

使用windowManager实现音乐播放器(悬浮框)效果相关推荐

  1. 一个开源音乐播放器,低仿QQ音乐!

    有暇,弄了个音乐播放器,页面效果整体上参考了QQ音乐,相关API使用了易源数据提供的相关接口(https://www.showapi.com/api/lookPoint/213),在此表示感谢.先来看 ...

  2. html5多媒体播放器,走进HTML5-学习多媒体,带你实现视频播放器、音乐播放器功能(*^▽^*)...

    欢迎关注个人我的博客分享一些前端技术.面试题.面试技巧等html Web 中的音频和视频 自 21 世纪初以来,咱们的带宽开始可以支持任意类型的视频在早些时候,传统的 web 技术(如 HTML )不 ...

  3. 从零玩转jQuery之项目开发(QQ音乐播放器)

    QQ音乐播放器项目 大体效果如下: HTML结构分析: 一.页面布局 1.首先来看下HTML大体结构: <div class="header"></div> ...

  4. 移动应用开发——uni-app框架 仿网易云音乐播放器学习心得

    目录 一.uni-app框架介绍 1.什么是 uni-app 2.为什么要选择uni-app 3.uni-app 统一规范 4.uni-app功能框架 二.开发工具与项目创建 1.开发工具 2.项目创 ...

  5. 音乐播放器android版,Android版音乐播放器

    音乐播放器是一个非常常见的应用,这篇博客就是介绍如何制作一个简单的音乐播放器,这款音乐播放器具有以下的功能:播放歌曲.暂停播放歌曲..显示歌曲的总时长.显示歌曲的当前播放时长.调节滑块可以将歌曲调节到 ...

  6. Android 音乐播放器的通知栏

    Android音乐播放器的通知栏 效果说明 我点击×按钮会关闭通知栏和应用, 点击停止按钮会在界面显示停止并且这个按钮的图片换成播放图片,再点击一次界面显示播放,且图片换回来 点击上一首和下一首按钮会 ...

  7. ubuntu 安装amarok音乐播放器

    ubuntu 安装amarok音乐播放器及部分使用步骤: 1.安装amarok音乐播放器: sudo apt-get install amarok 2.安装中文支持: 直接在ubuntu系统管理中选择 ...

  8. ajax不变音乐,WordPress Hermit音乐播放器插件支持Ajax防刷新不中断

    Hermit音乐播放器插件支持网易云音乐,虾米音乐和本地音乐.之前有给大家推荐了WordPress插入音乐播放器(插件和非插件两种方法)一文给出了在WordPress中加入音乐播放器的方法,还有Wor ...

  9. 计算机音乐播放器功能,一个超级漂亮的音乐播放器!尤其是音频可视化功能

    用于Android的音乐播放器,它使用Visualzer Class呈现当前正在播放的音乐的精美DNA(可视化). 超级漂亮的音乐播放器!尤其是音频可视化功能 用于Android的音乐播放器,它使用V ...

最新文章

  1. web前端培训:CSS中单行文本溢出显示省略号的方法
  2. boost::process::system相关的测试程序
  3. 比Jquery FlexiGrid更好用 dotnetFlexGrid 1.2beta更新-增加展现模板模式(Grid中可以放编辑控件和任意Html内容了)...
  4. 镶套iframe 鼠标滚动无效解决办法
  5. C语言 用传统流程图表示分段函数,C语言程序设计习题答案
  6. android 媒体的uri,安卓 - 从相对路径+显示名称中获取媒体的URI或ID
  7. centos7下docker设置阿里云镜像(自定义阿里云镜像)
  8. 安装Hyper-v Server 2016
  9. 随笔记录开发遇到的问题
  10. pandas包安装教程
  11. 计算机搜索不了硬盘文件资料,解决WINDOWS痛点,本地文件搜索从未如此简单
  12. Eclipse设置护眼豆沙绿
  13. PD快速充电协议(转)
  14. 电影评论分类:二分类问题(IMDB数据集)
  15. maven本地仓库中已有jar包,项目却读取不了
  16. aspose-slides-22.5-jdk16
  17. LaTeX 页面设置 插入代码
  18. 深度学习中的对抗损失怎么使用
  19. macOS 安装PhotoshopCC 2017
  20. 网络刷单背后的大圈套让很多人中招

热门文章

  1. php 连接 mysql主从_php 连接主从数据库
  2. sqlserver模糊查询不用like_vlookup配合通配符,模糊查询也能很精确,再也不用筛选了...
  3. 从初恋到生子,聊聊我的十年爱情。
  4. 单片机到底是不是嵌入式?
  5. 并发服务器的信号传递,使服务器支持并发、GIL全局解释器锁、死锁和Rlock、信号量、event事件、...
  6. c语言提取图片yiq分量,图片数字水印C语言代码
  7. kafka原理_kafka入门(原理搭建简单使用)
  8. java 置信区间_仅从均值和标准差绘制置信区间
  9. 循环训练_要想循环增肌,且不会伤害身体,你可以这样安排力量训练
  10. 按照姓名升序排序的代码_干货:6种EXCEL排序方法,让老板对你刮目相看