Android 如何在棒棒糖中使用setOutlineProvider代替setOutline
对于早期的L预览,有如下所示的一些示例可以添加到代码中,以便使用FAB(浮动操作按钮) 但不幸的是,由于不再支持setOutline方法,我无法使用相同的代码实现FAB,但它似乎已被替代方法“FAB.setOutlineProvider(ViewOutlineProvider);”所取代。谁能解释一下怎么用这个吗 这可能是我错过的一些非常简单的事情,但任何帮助都将不胜感激Android 如何在棒棒糖中使用setOutlineProvider代替setOutline,android,android-layout,android-5.0-lollipop,material-design,android-appcompat,Android,Android Layout,Android 5.0 Lollipop,Material Design,Android Appcompat,对于早期的L预览,有如下所示的一些示例可以添加到代码中,以便使用FAB(浮动操作按钮) 但不幸的是,由于不再支持setOutline方法,我无法使用相同的代码实现FAB,但它似乎已被替代方法“FAB.setOutlineProvider(ViewOutlineProvider);”所取代。谁能解释一下怎么用这个吗 这可能是我错过的一些非常简单的事情,但任何帮助都将不胜感激 // Outline int size = getResources().getDimensionPixelSize(R.d
// Outline
int size = getResources().getDimensionPixelSize(R.dimen.fab_size);
Outline outline = new Outline();
outline.setOval(0, 0, size, size);
Button fab = (Button) findViewById(R.id.fab);
fab.setOutline(outline);
fab.setClipToOutline(true);
Per:
可以使用类中的方法创建带有圆角的椭圆形和矩形轮廓。视图的默认大纲提供程序从视图的背景获取大纲。要防止视图投射阴影,请将其大纲提供程序设置为null
因此,您的ViewOutlineProvider
只需在outline
参数上调用setOval(0,0,size,size)
,以getOutline()
只需完成@ianhanniballake的回答:
Button fab = (Button) findViewById(R.id.fab);
//Outline outline = new Outline();
//outline.setOval(0, 0, size, size);
//fab.setOutline(outline);
ViewOutlineProvider viewOutlineProvider = new ViewOutlineProvider() {
@Override
public void getOutline(View view, Outline outline) {
// Or read size directly from the view's width/height
int size = getResources().getDimensionPixelSize(R.dimen.fab_size);
outline.setOval(0, 0, size, size);
}
};
fab.setOutlineProvider(viewOutlineProvider);
每个视图都有一个Outline对象和一个ViewOutlineProvider(V.O.p)对象。
顾名思义,viewoutlineprovider间接向视图提供轮廓
视图所做的是将其outline对象传递给V.O.p,V.O.p会更新它
因此,在VOP的getOutline方法中将视图的Outline对象作为参数,只需更新它即可
ViewOutlineProvider viewOutlineProvider = new ViewOutlineProvider() {
@Override
public void getOutline(View view, Outline outline) {
outline.setOval(0, 0, view.getWidth(), view.getHeight());
}
};
fab.setOutlineProvider(viewOutlineProvider);
您还应该事先检查设备的当前版本,因为这种方法只有在android L之后才受支持。它到底做什么?显示视图的正确阴影?@androiddeveloper-没错。默认情况下,阴影是使用视图的边界投射的,这对于填充整个边界的不透明矩形视图非常有效,但对于(在本例中)圆形视图显然不是这样。那么,如果我的视图有一个奇怪的形状,或者视图改变了形状,应该使用什么呢?@androiddeveloper-您可以使用设置任意路径。如果视图动态更改形状,并且希望更新大纲,则可以随时调用。api 21之前的版本如何?
ViewOutlineProvider viewOutlineProvider = new ViewOutlineProvider() {
@Override
public void getOutline(View view, Outline outline) {
outline.setOval(0, 0, view.getWidth(), view.getHeight());
}
};
fab.setOutlineProvider(viewOutlineProvider);