我想旋轉一些圖片我必須在屏幕上顯示,這些圖片是在一個stacklayout內,我需要顯示他們作爲肖像,而不是風景,我使用的圖像小工具 謝謝Kivy如何旋轉圖片
回答
混淆前2回答toto_tico的是一種方法做之前,但我寧願創建一個新的widget它,並使用它:
Builder.load_string('''
<RotatedImage>:
canvas.before:
PushMatrix
Rotate:
angle: root.angle
axis: 0, 0, 1
origin: root.center
canvas.after:
PopMatrix
''')
class RotatedImage(Image):
angle = NumericProperty()
然後,使用這個小部件作爲其他圖像小部件,你只需要一個「角度」屬性,你可以玩。
注意:碰撞檢測不在圖像上進行處理,除了分散示例。爲了旋轉某些東西,分散可能很昂貴,但至少碰撞是可行的。
我認爲他們是這樣做的兩種方式。我會發布兩個答案,並讓其他人決定什麼是正確的方法。我個人更喜歡這種方法,因爲我認爲它的計算較輕。然而,這並不是那麼直觀的
該方法使用RelativeLayout和兩個上下文指令(旋轉和平移)。
1 - 您需要將圖像嵌入RelativeLayout。爲什麼?因爲旋轉工作的方式類似於在(0,0)座標,即左下角放置一個釘子。 RelativeLayout將0,0設置爲Widget的位置。
2 - 您將需要使用canvas
3-正如我前面所說的,旋轉的指令相當於把一根釘子(0,0)的座標。想想一張紙。如果你在角落裏放一個釘子,旋轉就會在左邊結束。所以,在輪換之前,你需要把Translate這張紙放在你的右邊。
4-現在你可以Rotate RelativeLayout和它將結束在你期望的位置。
使用RelativeLayout還有另外一個好處。它已包含兩個重要說明(PushMatrix和PopMatrix),如果您正在進行廣泛的旋轉,縮放或翻譯工作,則必須瞭解這些說明。
下面是一個例子代碼:
from kivy.app import App
from kivy.uix.stacklayout import StackLayout
from kivy.lang import Builder
Builder.load_string("""
<Example>:
Image:
source: 'kivy.png'
size_hint: None,None
size: 64,64
RelativeLayout
size_hint: None,None
size: 64,64
canvas.before:
Translate:
x: 64
Rotate:
angle: 90
axis: 0,0,1
Image:
source: 'kivy.png'
size_hint: None,None
size: 64,64
""")
class Example(App, StackLayout):
def build(self):
return self
if __name__ == "__main__":
Example().run()
我不認爲Scatter,就是要爲這種用途。但我想是一個更直觀的解決方案。散點包括一個旋轉(也是一個比例)屬性。
基本上,我將圖像嵌入到Scatter中,並使用旋轉屬性旋轉90度。
爲什麼我說Scatter不適合這項任務。基本上,因爲它允許手勢。基本上可以用手指翻譯,旋轉或縮放(或使用multi-touch mouse emulation)。這就是爲什麼在下一個示例中,我將do_scale
,do_rotation
和do_translation
設置爲false。我澄清這一點,你獲得與do_rotation: false
from kivy.app import App
from kivy.uix.stacklayout import StackLayout
from kivy.lang import Builder
Builder.load_string("""
<Example>:
Image:
source: 'kivy.png'
size_hint: None,None
size: 64,64
Scatter:
pos: 0,0
size_hint: None,None
size: 64,64
do_rotation: False
do_scale: False
do_translation: False
rotation: 90
Image:
source: 'kivy.png'
size_hint: None,None
size: 64,64
""")
class Example(App, StackLayout):
def build(self):
return self
if __name__ == "__main__":
Example().run()
- 1. 如何旋轉圖片框
- 2. 如何旋轉kivy Canvas上的指令?
- 3. 圖片旋轉C++
- 4. 圖片旋轉:CSS
- 5. 如何動態旋轉圖片?
- 6. 如何讓背景圖片旋轉?
- 7. 如何點擊圖片旋轉
- 8. 如何在WinForms中旋轉圖片
- 9. 如何刪除自動圖片旋轉?
- 10. 如何使用jogl旋轉圖片?
- 11. 在圖片框中旋轉圖片
- 12. 如何使用Canvas在圖片周圍旋轉圖片?
- 13. CSS - 旋轉背景圖片
- 14. 圖片90度旋轉AVCam
- 15. 圖片庫旋轉木馬
- 16. 圖片在PictureBox中旋轉
- 17. 旋轉圖片錯誤:java.lang.OutOfMemoryError
- 18. 用Raphael.js旋轉圖片
- 19. 保存旋轉圖片(swift3)
- 20. TCPDF ImageSVG圖片旋轉
- 21. MonoTouch。旋轉背景圖片
- 22. JavaScript圖片旋轉/縮放
- 23. 將圖片旋轉90°
- 24. 圖片只旋轉一次
- 25. 如何用kivy加載圖片?
- 26. Kivy動漫類動畫Kivy圖片
- 27. 圖片/圖標旋轉使用CSS3旋轉
- 28. 片段旋轉
- 29. Kivy旋轉木馬從一個按鈕
- 30. iOS - 旋轉圖像或圖片
+1原產地 –
謝謝我以後再試,看來是最好的解決方法,感謝您的幫助,我對基維很新,我仍然錯過了框架的工作原理:) – nukedbit
重要的是始終面向對象。謝謝。 – ehsan88