大纲提供程序不再工作



我正在尝试为视图设置大纲(浮动操作按钮)。关键在于它曾经工作了一段时间,所以代码和错误都没有问题,它完美地显示了阴影。然后它不再显示不知从何而来的阴影。我想我已经检查了与此有关的所有内容,但找不到问题所在。

所以这是我一直在处理的代码:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        ImageButton fab = (ImageButton) findViewById(R.id.fab);
        ViewOutlineProvider outlineProvider = new ViewOutlineProvider() {
            @TargetApi(Build.VERSION_CODES.LOLLIPOP)
            @Override
            public void getOutline(View view, Outline outline) {
                int fabSize = view.getHeight();
                //int fabSize = getResources().getDimensionPixelSize(R.dimen.fab_big);
                outline.setOval(0, 0, fabSize, fabSize);
            }
        };
        fab.setOutlineProvider(outlineProvider);
}

我的晶圆厂是一个简单的图像按钮,带有波纹作为背景,并在 56*56dp 内有一个图像 src(加号)。

有什么建议吗?

编辑:几天后,我会说大纲提供程序仅适用于Button,不适用于ImageButton......进一步的测试将在几个小时内进行。

在 getOutline 方法中,应将 clip 设置为 outline true:

public void getOutline(View view, Outline outline) {
    int fabSize = view.getHeight();
    outline.setOval(0, 0, fabSize, fabSize);
    view.setClipToOutline(true);
}

您可以像这样尝试,无需设置边距:

setClipToOutline(true);
setOutlineProvider(new ViewOutlineProvider() {
    @Override
    public void getOutline(View view, Outline outline) {
        outline.setRoundRect(0, 0, view.getWidth(), view.getHeight(), cornerSize);
    }
});

否则:

setOutlineProvider(new ViewOutlineProvider() {
  @Override
  public void getOutline(View view, Outline outline) {
    Rect rect = new Rect();
    view.getGlobalVisibleRect(rect);
    ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
    int leftMargin = layoutParams.leftMargin;
    int topMargin = layoutParams.topMargin;
    rect.set(leftMargin, topMargin, rect.right - rect.left - leftMargin, rect.bottom - rect.top - topMargin);
    outline.setOval(rect);
    view.setClipToOutline(true);
  }
});

并将此视图作为其父视图添加到视图组中。

相关内容

  • 没有找到相关文章

最新更新