onCreate
活动中有这个:WindowManager.LayoutParams layOutParams = new WindowManager.LayoutParams(
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT);
所需的标志是WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY
和WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
。
责任在于确保触摸事件被处理,这意味着要在触摸事件“命中”某个区域时注意并根据情况采取行动。通过“侦听”视图的onTouch
事件来实现:
LayoutInflater layOutInflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
View myView = layOutInflater.inflate(R.layout.myview, null);
myView.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
....
}
});
例如,想象一个位于名为myview
的布局中的按钮,使用按钮小部件实现。Button myButton = (Button)myView.findViewById(R.id.myButton);
Rect outRectHit = new Rect();
myButton.getHitRect(outRectHit);
现在我们需要确定触摸边界的“碰撞”,这发生在onTouch
处理程序内部:
float x = event.getX();
float y = event.getY();
if (x > outRectHit.left && x < outRectHit.right &&
y > outRectHit.top && y < outRectHit.bottom){
... Handle this accordingly
}
这个简短的摘要说明了如何在任何活动上方创建一个叠加层。
只需确保代码得到调试,并且不以任何形式干扰显示的任何活动。例如,如果活动实际上是OpenGL游戏,该怎么办?
这就是需要注意的事项。
您可能想要查看Tooleap SDK。它提供了将常规Android活动转换为浮动小部件的最简单方法。
例如,假设您有一个名为MyActivity的活动
Intent intent = new Intent(context, MyActivity.class);
TooleapPopOutMiniApp miniApp = new TooleapPopOutMiniApp(context, intent);
Tooleap tooleap = Tooleap.getInstance(context);
tooleap.addMiniApp(miniApp);
现在,MyActivity将作为浮动小部件出现在任何其他应用程序的顶部。