Android部分有效活动

时间:2017-01-13 09:50:03

标签: android

我有一项活动A.我正在为此活动创建一种用户教程,教他如何在该屏幕上使用该应用程序。

为此,我的要求是: 除了一个视图,我想模糊活动的所有视图。我想提示用户通过指向该视图的手形图像点击该视图。

如果用户点击模糊/灰色区域,则不会发生任何事情,但如果他点击该特定活动视图,则应该对该触摸作出反应。

我正在考虑为此使用全屏片段。片段将从活动中获取以下输入:

  • 对于什么坐标,不应该模糊屏幕并将触摸事件传递给活动
  • 应该显示指向手形图像的坐标。

在这些坐标之后,片段背景会模糊。

我想确认是否可能,使片段部分激活,即将其触摸事件委托给活动的特定视图的活动。

另外,如果还有其他更好的方法可以达到同样的目的,请告诉我。

编辑1:

考虑在这里使用片段,因为我将来希望在不同的屏幕上使用这种类型的行为。在这种情况下,我会使该片段通用,它需要一些输入(如上所述)并在不同的屏幕上使用它。

2 个答案:

答案 0 :(得分:1)

我发现在我的活动的UI周围添加一个“额外”布局要容易得多,然后在其中添加一个最高z灰色的大部分透明过滤器并将指令放在其上。

指令的每个“步骤”都是一个不同的布局,在单击时动态加载到该布局容器中。 (只是另一种方法)

'容器'布局是:FrameLayout

然后在我的活动中我有:(忽略错误的命名)

private void addOverlayLayout() {

    frameLayout = (FrameLayout) findViewById(R.id.framelayoutInner);
    frameLayout3 = (FrameLayout) findViewById(R.id.framelayout3);

    frameLayout3.setBackgroundColor(Color.DKGRAY);
    frameLayout3.setAlpha(0.3f);

    // Dynamically create a relativelayout which will be appended to framelayout
    relativeLayout = new RelativeLayout(getApplicationContext());
    relativeLayout.setLayoutParams(new RelativeLayout.LayoutParams(ViewGroup.LayoutParams
            .MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

    instructionOverlays.add(createSimpleClickInstruction(R.layout.instruction_reader_1));
    instructionOverlays.add(createSimpleClickInstruction(R.layout.instruction_reader_2));

    if (FullscreenReaderActivity.isFirstRun) {
        displayNextGuide();
    }

}

public void displayNextGuide() {

    // clean relative layout if it has views
    relativeLayout.removeAllViews();
    // clean frame layout if it has child (safe if empty)
    frameLayout.removeView(relativeLayout);

    if (!isFirstRun) {
        return;
    }

    if (instructionOverlays.size() > 0) {
        runOnUiThread(instructionOverlays.get(0));
        instructionOverlays.remove(0);
    } else {
        frameLayout3.setBackgroundColor(Color.TRANSPARENT);
        frameLayout3.setAlpha(1.0f);
    }
}

public Runnable createSimpleClickInstruction(final int resource) {
    return new Runnable() {
        @Override
        public void run() {
            getLayoutInflater().inflate(
                    resource,
                    relativeLayout,
                    true
            );
            relativeLayout.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    displayNextGuide();
                }
            });
            frameLayout.addView(relativeLayout);
        }
    };
}

答案 1 :(得分:1)

有一个非常好的名为SCV的库可以完成您想要实现的目标,您也可以为它自定义样式。我第一次使用它来打开应用程序以向用户显示教程。

根据他们的Github

  

ShowcaseView(SCV)库旨在通过独特而有吸引力的叠加层向用户突出显示和展示应用的特定部分。该库非常适合指出用户,手势或模糊但有用的项目的兴趣点。

进一步阅读:

enter image description here