Android 大纲提供程序不再工作
我正在尝试为视图设置大纲(浮动操作按钮)。 关键在于它曾经工作过一段时间,所以代码和错误都没有问题,而且它完美地显示了阴影。然后它停止显示一个不知从何而来的阴影。 我想我已经检查了所有与此相关的内容,但没有发现问题 这是我一直在编写的代码:Android 大纲提供程序不再工作,android,outline-view,floating-action-button,Android,Outline View,Floating Action Button,我正在尝试为视图设置大纲(浮动操作按钮)。 关键在于它曾经工作过一段时间,所以代码和错误都没有问题,而且它完美地显示了阴影。然后它停止显示一个不知从何而来的阴影。 我想我已经检查了所有与此相关的内容,但没有发现问题 这是我一直在编写的代码: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { ImageButton fab = (ImageButton) findViewById(R.id.fab);
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(加号)
有什么建议吗
编辑:几天后,我会说大纲提供程序只适用于
按钮
,而不适用于图像按钮
。。。几小时后将进行进一步测试。在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);
}
});
并将此视图作为其父视图添加到视图组中。有一个简单的库,可轻松实现此功能;在这里检查我的答案: