使用 kivy 顶点指令在 ModalView 上绘制阴影边框?
Draw a shadow border on ModalView with kivy Vertex Instruction?
我正在尝试使用 Canvas
Line
顶点指令为 ModalView
绘制阴影。 IE。 ModalView
底部和左侧在打开时应该有轻微的阴影覆盖。我试过调用 ModalView
属性 overlay_color
没有效果,并且 Canvas
Line
顶点指令没有产生正确的效果。但是我似乎不能只画一个底部和左边的边框来产生阴影效果。
<PopScrollModal>
on_open: app.root._is_modal_open = True
on_dismiss: app.root._is_modal_open = False
id: popscroll
auto_dismiss: True
orientation: 'vertical'
size_hint: (0.94, 0.41)
border: [50, 50, 16, 16]
overlay_color: [0.1, 0.1, 0.1, 0.4]
pos_hint: {'top': 0.72}
background_normal: ''
background_color: (1, 1, 1, 0)
background: 'white.png'
canvas:
Color:
rgba: app.theme_cls.bg_dark
RoundedRectangle:
size: self.size
pos: self.pos
radius: [7,]
canvas.after:
Color:
rgba: (0.2, 0.2, 0.2, 0.4)
Line:
width: 1.
rounded_rectangle: (self.x, self.y, self.width, self.height, 7)
RecycleView:
id: view_popscroll
viewclass: 'PopScrollBut'
pos_hint: {'top': 1}
size_hint: [1, 0.99]
do_scroll_y: True
RecycleGridLayout:
cols: 1
spacing: 1
default_size: None, 70
default_size_hint: 1, None
size_hint: 1, None
size: self.minimum_size
这条线指令绘制在底部但不遵守canvas的半径:
canvas.after:
Color:
rgba: (0.2, 0.2, 0.2, 0.4)
Line:
width: 1.
close: False
points: self.pos[0], self.pos[1], self.pos[0] + self.size[0], self.pos[1]]
Line
指令只在 ModalView
周围画了一条线。
有人可以帮助理解如何设置 Points
以便它们只出现在左侧和底部或以相同的方式设置 overlay_color
吗?
您可以使用 BorderImage
来做到这一点。它没有很好的文档记录,也很难理解它实际是如何工作的。但这里有一个主要做你想做的例子:
class MyPop(Popup):
pass
kv = '''
<MyPop>:
canvas.before:
BorderImage:
source: 'shadow32.png'
border: 30, 0, 0, 30
pos: self.x - 30, self.y - 30
size: self.width + 60, self.height + 60
'''
这里是上面使用的shadow32.png
:
我正在尝试使用 Canvas
Line
顶点指令为 ModalView
绘制阴影。 IE。 ModalView
底部和左侧在打开时应该有轻微的阴影覆盖。我试过调用 ModalView
属性 overlay_color
没有效果,并且 Canvas
Line
顶点指令没有产生正确的效果。但是我似乎不能只画一个底部和左边的边框来产生阴影效果。
<PopScrollModal>
on_open: app.root._is_modal_open = True
on_dismiss: app.root._is_modal_open = False
id: popscroll
auto_dismiss: True
orientation: 'vertical'
size_hint: (0.94, 0.41)
border: [50, 50, 16, 16]
overlay_color: [0.1, 0.1, 0.1, 0.4]
pos_hint: {'top': 0.72}
background_normal: ''
background_color: (1, 1, 1, 0)
background: 'white.png'
canvas:
Color:
rgba: app.theme_cls.bg_dark
RoundedRectangle:
size: self.size
pos: self.pos
radius: [7,]
canvas.after:
Color:
rgba: (0.2, 0.2, 0.2, 0.4)
Line:
width: 1.
rounded_rectangle: (self.x, self.y, self.width, self.height, 7)
RecycleView:
id: view_popscroll
viewclass: 'PopScrollBut'
pos_hint: {'top': 1}
size_hint: [1, 0.99]
do_scroll_y: True
RecycleGridLayout:
cols: 1
spacing: 1
default_size: None, 70
default_size_hint: 1, None
size_hint: 1, None
size: self.minimum_size
这条线指令绘制在底部但不遵守canvas的半径:
canvas.after:
Color:
rgba: (0.2, 0.2, 0.2, 0.4)
Line:
width: 1.
close: False
points: self.pos[0], self.pos[1], self.pos[0] + self.size[0], self.pos[1]]
Line
指令只在 ModalView
周围画了一条线。
有人可以帮助理解如何设置 Points
以便它们只出现在左侧和底部或以相同的方式设置 overlay_color
吗?
您可以使用 BorderImage
来做到这一点。它没有很好的文档记录,也很难理解它实际是如何工作的。但这里有一个主要做你想做的例子:
class MyPop(Popup):
pass
kv = '''
<MyPop>:
canvas.before:
BorderImage:
source: 'shadow32.png'
border: 30, 0, 0, 30
pos: self.x - 30, self.y - 30
size: self.width + 60, self.height + 60
'''
这里是上面使用的shadow32.png
: