我正在尝试为视图(浮动操作按钮)设置轮廓。 关键是它曾经工作过一段时间,所以代码没有问题,也没有错误,并且它完美地显示了阴影。然后它不再出现不知从何而来的影子。 我想我已经检查了与此有关的所有内容,但找不到问题。
这是我一直在研究的代码:
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);
}
我的 fab 是一个简单的 ImageButton,带有波纹作为背景和 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);
}
你可以尝试这种没有margin的方式:
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);
}
});
并将此 View 添加到 ViewGroup 中作为其父级。