2017-12-26 4 views
3

Ich bin ziemlich verwirrt über die Größenänderung mit Picasso. Wenn ich es richtig verstehe, müssen wir Pixel an die Methode resize übergeben, also müssen wir sie manuell von dp konvertieren, um unterschiedliche Bildschirmdichten zu unterstützen. Aber was macht die resizeDimen Methode? Nimmt es Dimension in DP, so müssen wir sie nicht mehr manuell konvertieren? Wie ist das mit der fit Methode verbunden?Verwendet Picassos resizeDimen() Methode dp oder Pixel?

Antwort

2
  • resizeDimen Verwendung Dimen Ressource (nicht nether px dp). Dimen Ressourcen sieht wie <dimen name="logo_width">96dp</dimen> aus und sie werden wie folgt verwendet: R.dimen.logo_width.
  • resize Verfahren Verwendung pixel
  • fit Methode Ihre Quelle entsprechend der Zielgröße (in der Regel ein Image)

Hinweis Größe verändern: Die Umwandlung von jeder Dimension Einheiten Pixel von einem Android Kontext gemacht (der Kontext in Picasso.with(context)). Werfen Sie einen Blick auf diese method von Picasso Quellcode und diese method Android-Quellcode, um zu verstehen, wie die Konvertierung funktioniert.

+0

Das verwirrt mich. Warum bietet die "resize" -Methode nicht die Möglichkeit, statt px die Größe auf dp zu ändern, aber die 'resizeDimen'-Methode benötigt eine Ressourcen-ID, die auf dp zeigt? –

+0

Die Standardeinheit für Picasso ist das Pixel (wie Sie in der Resize-Methode sehen können). Aber für die resizeDimen-Methode ist dies nicht Picasso, die den Wert von [jeder Maßeinheit] in px umwandeln, das ist das Android-System. –

+0

Also, wenn ich es richtig verstehe, auf diese Weise kann ich vermeiden, dp zu Pixeln manuell zu konvertieren und stattdessen eine dp res id übergeben? –

2

Die Größe resizeDimen ändert sich auch in Pixel, außer dass Sie nicht den genauen ganzzahligen Wert angeben müssen, sondern stattdessen die Ressourcen-ID übergeben können.

So ist resize(96,96) die gleiche wie reSizeDimen(R.dimen.header_logo_w, R.dimen.header_logo_h) wo

res/values/dimens.xml 
<?xml version="1.0" encoding="utf-8"?> 
<resources> 
<dimen name="header_logo_h">96px</dimen> 
<dimen name="header_logo_w">96px</dimen> 
</resources> 

Lassen Sie mich wissen, wenn Sie weitere explaination benötigen

+0

Ok, danke. Also wenn ich 'fit()' nicht verwende, dann muss ich immer darauf achten, dp in px umzuwandeln, oder? –

+0

Und was passiert, wenn ich eine Ressourcen-ID übergeben, die in DP definiert ist? –

+0

@FlorianWalther - Wenn Sie den Quellcode von Picasso studieren, werden Sie sehen, dass er den ganzzahligen Wert in Ihrer Ressourcendatei immer in die entsprechenden Pixel umwandelt, indem er resources.getDimensionPixelSize -> https://github.com/square/picasso verwendet /blob/5ddd855c1e98379a1812c0ccccbdc200a30312cc/picasso/src/main/java/com/squarepup/picasso/RequestCreator.java –

Verwandte Themen