通过WindowManager实现拖动悬浮框

原创 2015年11月17日 21:15:18

   最近在弄一个WindowManager拖动的小demo,重新研究了一下 WindowManager。

   直接上源码:

  

package com.haihang.floatviewdemo;

import android.content.Context;
import android.graphics.PixelFormat;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.WindowManager;

public class FloatView implements OnTouchListener {

	private Context mContext;
	private static WindowManager mWm;
	private static WindowManager.LayoutParams mWinParams;
	private static View view;
	private float mDownX;
	private float mDownY;
	private float mMoveX;
	private float mMoveY;

	public FloatView(Context context) {
		this.mContext = context;

		view = View.inflate(mContext, R.layout.float_view, null);

		mWm = (WindowManager) context.getApplicationContext().getSystemService(
				Context.WINDOW_SERVICE);

		mWinParams = new WindowManager.LayoutParams();
		mWinParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
		mWinParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
		mWinParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
				| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
		mWinParams.format = PixelFormat.TRANSLUCENT;
		// mParams.windowAnimations =
		// com.android.internal.R.style.Animation_Toast;//动画设置
		//在小米手机的 5.0系统中,需要设置 type为 TYPE_TOAST,才能显示
		mWinParams.type = WindowManager.LayoutParams.TYPE_TOAST;

		view.setOnTouchListener(this);
	}

	public void show() {
		mWm.addView(view, mWinParams);
	}
	
	public void hide(){
		if(mWm != null){
			mWm.removeView(view);
		}
	}

	@Override
	public boolean onTouch(View view, MotionEvent event) {

		switch (event.getAction()) {
		case MotionEvent.ACTION_DOWN:
			
			mDownX = event.getRawX();
			mDownY = event.getRawY();
			
			break;
		case MotionEvent.ACTION_MOVE:
			
			/**
			 * 最为关键的就是拖动业务的坐标位置的计算
			 */
			
			mMoveX = event.getRawX();
			mMoveY = event.getRawY();

			float difX =  (mMoveX - mDownX);
			float difY =  (mMoveY - mDownY);
			
			mWinParams.x += difX;
			mWinParams.y += difY;
			
			mWm.updateViewLayout(view, mWinParams);
			
			mDownX = mMoveX;
			mDownY = mMoveY;
			
			break;
		case MotionEvent.ACTION_UP:

			break;

		default:
			break;
		}

		// 消费触摸事件
		return true;
	}

}



Android 使用WindowManager实现悬浮窗及源码解析

本文已授权微信公众号《鸿洋》原创首发,转载请务必注明出处。 一个Activity、一个Service和两个布局文件。布局十分简单,这里就不贴了,大概描述下。activity_main.xml中俩按钮,...
  • qq_17250009
  • qq_17250009
  • 2016年10月24日 09:18
  • 5355

android WindowManager可拖动悬浮按钮

代码地址 http://git.oschina.net/azure_sword/Sample_AS 可悬浮按钮的两种情况 1.当前页面悬浮 2.所有页面悬浮(包括系统页面) 注:第二种功能...
  • qq_28934205
  • qq_28934205
  • 2016年04月05日 11:30
  • 2293

使用WindowManager实现悬浮窗

public class MainActivity extends Activity { WindowManager windowManager; WindowManager.Lay...
  • syyair
  • syyair
  • 2015年09月06日 15:38
  • 1464

WindowManager实现悬浮可拖动效果

现在360手机卫士有个流量统计的效果,开启流量统计后,在桌面上会出现一个显示流量的窗体,在任何界面都可以自由拖动。 模仿这个功能,做了一个统计手机信号强度的Demo, 界面效果如下: 从上面的截图...
  • shineflowers
  • shineflowers
  • 2014年11月06日 16:22
  • 1698

Android_WindowManager_实现类似360流量悬浮框

这里主要用到WindowManager类,通过WindowManager的addView(View view, WindowManager.LayoutParams params)方法可以在窗体中添...
  • strawberry2013
  • strawberry2013
  • 2013年12月01日 12:38
  • 3543

Android悬浮窗实现 使用WindowManager Demo

  • 2016年09月19日 11:23
  • 29.35MB
  • 下载

WindowManager.addView()实现悬浮窗口播放视频

  • 2016年08月19日 21:35
  • 6.18MB
  • 下载

Android 利用WindowManager实现悬浮窗 demo

  • 2017年10月31日 13:16
  • 137KB
  • 下载

android利用windowmanager实现悬浮窗

  • 2016年09月15日 23:33
  • 23.07MB
  • 下载

利用windowManager悬浮框实时锁屏效果

  • 2015年09月15日 00:33
  • 1.93MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:通过WindowManager实现拖动悬浮框
举报原因:
原因补充:

(最多只允许输入30个字)