大家对悬浮窗概念不会陌生,相信每台电脑桌面的右上角都会有这么一个东西,它总是出现在所有页面的顶端(Top Show)。但在Android平台中如何实现这样的效果呢?先来看一看效果图。 看见在Google 搜索框上面的那个Icon 图片了嘛。下面我就来详细介绍一下在Android 平台下悬浮窗口的实现,并让它能够随手指的触摸而移动。 一、实现原理及移动思路 调用 WindowManager,并设置 WindowManager.LayoutParams 的相关属性,通过 WindowManager 的addView 方法创建 View,这样产生出来的View 根据 WindowManager.LayoutParams 属性不同,效果也就不同了。比如创建系统顶级窗口,实现悬浮窗口效果!然后通过覆写悬浮View中onTouchEvent 方法来改变 windowMananager.LayoutParams 中x和 y的值来实现自由移动悬浮窗口。 二、示例代码 先来看一看悬浮View 的代码,这里用一个ImageView 作为演示 [java] view plaincopyprint? 1. public class MyFloatView extends ImageView { 2. private float mTouchStartX; 3. private float mTouchStartY; 4. private float x; 5. private float y; 6. 7. private WindowManager wm=(WindowManager)getContext().getApplicationContext().getSystemService("window"); 8. //此 wmParams 变量为获取的全局变量,用以保存悬浮窗口的属性 9. private WindowManager.LayoutParams wmParams = ((MyApplication)getContext().getApplicationContext()).getMywmParams(); 10. 11. public MyFloatView(Context context) { 12. super(context); 13. // TODO Auto-generated constructor stub 14. } 15. 16. @Override 17. public boolean onTouchEvent(MotionEvent event) { 18. //获取相对屏幕的坐标,即以屏幕左上角为原点 19. x = event.getRawX(); 20. y = event.getRawY()- 25; //25 是系统状态栏的高度 21. Log.i("currP", "currX"+x+"====currY"+y); 22. switch (event.getAction()) { 23. case MotionEvent.ACTION_DOWN: // 捕获手指触摸按下动作 24. //获取相对View 的坐标,即以此View 左上角为原点 25. mTouchStartX = event.getX(); 26. mTouchStartY = event.getY(); 27. Log.i("startP", "startX"+mTouchStartX+"====startY"+mTouchStartY); 28. break; 29. 30. case Mot...