2017-04-07 20 views
0

私は問題を説明する前にちょっとした文脈から始めます。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の幅が非常に大きくなることができます。あなたがよりよく理解するように、ここに絵があります:

Kivy's AsyncImage widget resize issue

私が考えることができる唯一の回避策は次のとおりです。

<[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高さ

おかげで長い記事のためのあなたの注意のためにたくさんして申し訳ありませんがあることを確実に知ります。

答えて

0

#kivy IRCチャンネルのAtisが解決策を見つけました。 1つは単にimage_ratio!を使用するべきです:

AsyncImage: 
    size_hint: None,None 
    size:self.image_ratio*root.height,root.height 
    source: root.image_url 
    mipmap: True  
関連する問題