有谁知道如何实施?
一些例子:
有什么想法吗?感谢。
答案 0 :(得分: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_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游戏会发生什么,你做什么?
这是为了说明需要注意的事项。
答案 1 :(得分: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现在可以作为任何其他应用程序之上的浮动小部件使用。