在Android启动浮动窗口小部件/覆盖

问题描述 投票:5回答:2

有没有人有任何想法,这可怎么实现的?

一些例子:

任何想法?谢谢。

android overlay
2个回答
11
投票

即使用在上面覆盖所做的现有活动不管。您可以在这里找到发现我github证明概念的证明,这是对Android的stackexchange.com问题源,其中,人谁从残疾遭受的,不能滑动屏幕滚动并正在寻找一种方式来做到这一点方便,在我拼凑起来的代码来显示“的Page Up / Page Down键”以最小的运动,只是通过点击文本(实际上,它的按钮),其覆盖在活动的顶部。但由于道路Android和安全工作,滚动事件不能被注入到正在运行的活动。

它的工作方式是这样的,从onCreate活动有这

WindowManager.LayoutParams layOutParams = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
                WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
                PixelFormat.TRANSLUCENT);

所需要的标志WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAYWindowManager.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的游戏,会发生什么,你会怎么做?

这是需要说明的被关注什么。


6
投票

你可能想看看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现在将成为可用的任何其他应用程序的顶部浮动窗口小部件。

© www.soinside.com 2019 - 2024. All rights reserved.