私は問題を説明する前にちょっとした文脈から始めます。KIVY:AsyncImageウィジェットはRecycleView内でサイズを変更しています
私は、default_sizeが(親のサイズに基づいて)動的なRecycleBoxLayoutを含むRecycleViewウィジェットを実装しました。私のアプリは多種多様なデバイスで使用され、RVには平均4個のPlaylistItemが含まれているので、これが必要です(おそらく間違っていると思います)。ここで.kvファイル内のコード:
RecycleView:
id: rv
scroll_type: ['bars', 'content']
scroll_wheel_distance: dp(114)
viewclass: 'PlaylistItem'
RecycleBoxLayout:
default_size: None, (self.parent.height/4 - dp(80)) if self.parent.height/4 > dp(60) else dp(60)
default_size_hint: 1, None
size_hint_y: None
height: self.minimum_height
orientation: 'vertical'
spacing: dp(20)
padding: dp(20)
は、今度はPlaylistItem viewclassのコードを見てみましょう:
<[email protected]>:
created_time: ''
description: ''
id: ''
image_url: ''
name: ''
owner: ''
updated_time: ''
playlist_name: ''
MDCard:
AsyncImage:
size_hint_x: .2
size: self.texture_size
source: root.image_url
mipmap: True
BoxLayout:
orientation:'vertical'
MDLabel:
text: root.playlist_name
theme_text_color: 'Secondary'
font_style:'Title'
MDSeparator:
height: dp(1)
MDLabel:
text: 'Body'
theme_text_color: 'Primary'
だから、私は内部の画像の比率を維持したいと思いますAsyncImageウィジェット。この画像の幅を親ウィジェットの20%にしたいと思います。最後に、AsyncImageのサイズを画像の(テクスチャ)サイズと同じにしたいと思います。上記のコードでは、ウィンドウのサイズによっては画像の高さが常に親の高さに等しいとは限りません(結果はかなり綺麗ではありません)。私がしようとすると:(MDCardの高さに等しい)
AsyncImage:
size_hint_y: None
height: self.parent.height
source: root.image_url
mipmap: True
画像の高さは常に良いですが、AsyncImageの幅が非常に大きくなることができます。あなたがよりよく理解するように、ここに絵があります:
私が考えることができる唯一の回避策は次のとおりです。
<[email protected]>:
created_time: ''
description: ''
id: ''
image_url: ''
name: ''
owner: ''
updated_time: ''
playlist_name: ''
# I ADDED THIS # <----------------------------------
size_hint_y: None
miminum_height: self.minimum_height
MDCard:
AsyncImage:
size_hint_x: .2
size: self.texture_size
source: root.image_url
mipmap: True
これが機能していません。 initの時点でまだテクスチャがロードされていないと思うので、self.minimum_heightはNoneです。そのことはよくわからない。誰かが助けてくれることを願います。
ボーナス詳細:私はすべての私の生の画像が480PX高さ
おかげで長い記事のためのあなたの注意のためにたくさんして申し訳ありませんがあることを確実に知ります。