Falsche Größe von Drawable.getIntrinsicWidth()
Ich Bild herunterladen mit diesem code:
ImageGetter imageGetter = new ImageGetter() {
@Override
public Drawable getDrawable(String source) {
Drawable drawable = null;
try {
URL url = new URL(source);
String path = Environment.getExternalStorageDirectory().getPath()+"/Android/data/com.my.pkg/"+url.getFile();
File f=new File(path);
if(!f.exists()) {
URLConnection connection = url.openConnection();
InputStream is = connection.getInputStream();
f=new File(f.getParent());
f.mkdirs();
FileOutputStream os = new FileOutputStream(path);
byte[] buffer = new byte[4096];
int length;
while ((length = is.read(buffer)) > 0) {
os.write(buffer, 0, length);
}
os.close();
is.close();
}
drawable = Drawable.createFromPath(path);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (Throwable t) {
t.printStackTrace();
}
if(drawable != null) {
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
}
return drawable;
}
};
Dieses Bild hat die Größe 20x20. Aber drawable.getIntrinsicWidth() und drawable.getIntrinsicHeight() return 27. Und das Bild sieht größer. Wie kann ich es beheben?
Du musst angemeldet sein, um einen Kommentar abzugeben.
BitmapDrawable muss scale-bitmap-zum Ausgleich für die unterschiedlichen Bildschirmauflösungen.
Wenn Sie es brauchen, um zu zeichnen pixel für pixel, versuchen Sie Drawable source-Dichte & target-Dichte auf denselben Wert. Um dies zu tun, müssen Sie leicht verschiedene Objekte, mit zu arbeiten.
Statt
verwenden
Wenn Sie keinen Kontext haben (was Sie sollten), können Sie mithilfe von application context, siehe z.B. Verwendung von Kontext-überall?
Seit bitmap ist die Dichte einstellen, um Ressourcen' Dichte, das ist tatsächlich der Bildschirm des Geräts Dichte, sollte es zeichnen, ohne zu skalieren.
Habe ich versucht, den code, der form der Antwort und hat nicht funktioniert. So anstelle ich verwendete den folgenden code und es funktionierte gut.