Android实现悬浮窗口

来源:互联网 发布:oveplayer mac 编辑:程序博客网 时间:2024/05/01 02:32

Android悬浮窗口步骤
1新建FxService

package service;import android.app.Service;import android.content.Intent;import android.graphics.PixelFormat;import android.os.IBinder;import android.support.annotation.Nullable;import android.util.Log;import android.view.Gravity;import android.view.LayoutInflater;import android.view.MotionEvent;import android.view.View;import android.view.WindowManager;import android.widget.Button;import android.widget.LinearLayout;import wellray.fxdemo.R;public class FxService extends Service{    WindowManager mWindowManager;    WindowManager.LayoutParams wmParams;    LinearLayout mFloatLayout;    Button mFloatView;    boolean flag=true;    private static final String TAG = "FloatWindowTest";    @Nullable    @Override    public IBinder onBind(Intent intent) {        return null;    }    @Override    public void onCreate() {        super.onCreate();        Log.i(TAG, "onCreate"  );        createFloatView();    }    @Override    public void onStart(Intent intent, int startId) {        super.onStart(intent, startId);        if(flag){            flag=false;            mWindowManager.addView(mFloatLayout, wmParams);        }    }    private void createFloatView() {        //获取LayoutParams对象        wmParams = new WindowManager.LayoutParams();        //获取的是LocalWindowManager对象        mWindowManager = (WindowManager)getApplication().getSystemService(getApplication().WINDOW_SERVICE); ;        //获取的是CompatModeWrapper对象        //mWindowManager = (WindowManager) getApplication().getSystemService(Context.WINDOW_SERVICE);        Log.i(TAG, "mWindowManager3--->" + mWindowManager);        wmParams.type = WindowManager.LayoutParams.TYPE_PHONE;        wmParams.format = PixelFormat.RGBA_8888;;        wmParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;        wmParams.gravity = Gravity.LEFT | Gravity.TOP;        wmParams.x = 0;        wmParams.y = 0;        wmParams.width = WindowManager.LayoutParams.WRAP_CONTENT;        wmParams.height = WindowManager.LayoutParams.WRAP_CONTENT;        LayoutInflater inflater  =LayoutInflater.from(getApplication());        mFloatLayout = (LinearLayout) inflater.inflate(R.layout.fx_layout, null);        mFloatView = (Button)mFloatLayout.findViewById(R.id.button_f);        //绑定触摸移动监听        mFloatView.setOnTouchListener(new View.OnTouchListener()        {            @Override            public boolean onTouch(View v, MotionEvent event)            {                wmParams.x = (int)event.getRawX() - mFloatLayout.getWidth()/2;                //25为状态栏高度                wmParams.y = (int)event.getRawY() - mFloatLayout.getHeight()/2 - 40;                mWindowManager.updateViewLayout(mFloatLayout, wmParams);                return false;            }        });        //绑定点击监听        mFloatView.setOnClickListener(new View.OnClickListener()        {            @Override            public void onClick(View v)            {               /* Intent intent = new Intent( getActivity(), ResultActivity.class);                startActivity(intent);*/               /* if(mFloatLayout!=null){                    mWindowManager.removeView(mFloatLayout);                    flag=true;                }*/                stopSelf();            }        });    }    @Override    public void onDestroy()    {        super.onDestroy();        if(mFloatLayout != null)        {            //移除悬浮窗口            mWindowManager.removeView(mFloatLayout);            flag=true;        }    }}

悬浮窗口布局文件R.id.fx_layout

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent">    <Button        android:id="@+id/button_f"        android:text="@string/app_name"        android:layout_width="wrap_content"        android:layout_height="wrap_content" /></LinearLayout>

2 配置文件中加入权限和配置FxService

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

3启动FxService

    Intent intent = new Intent(getActivity(), FxService.class);        getActivity().startService(intent);

demo下载:http://download.csdn.net/detail/qq_17525769/9695640

0 0
原创粉丝点击