使用windowManager实现音乐播放器(悬浮框)效果
生活随笔
收集整理的這篇文章主要介紹了
使用windowManager实现音乐播放器(悬浮框)效果
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在使用要獲取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实现音乐播放器(悬浮框)效果的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用WindowManager实现Andr
- 下一篇: Java中值传递和引用传递原理以及区别