Ich möchte keine Bildansicht in meine Ansicht einfügen, ich möchte nur eine Bitmap als Hintergrund meiner Ansicht festlegen. Aber ich möchte die Bitmap centerCropped. Standardmäßig ist der Bitmap-Hintergrund so gestreckt, dass er an die Grenzen der Ansicht angepasst ist.Android: Wie kann ich den Hintergrund einer Ansicht zentrieren?
0
A
Antwort
0
Sie können dies tun, indem Sie einen benutzerdefinierten Background-Zeichensatz implementieren.
Ich implementierte eine Unterklasse von BitmapDrawable
, die centreCrops die Bitmap (im Grunde überschreiben die onDraw(Canvas)
Mehthod).
Code:
package com.github.premnirmal;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.drawable.BitmapDrawable;
/**
* A subclass of bitmap drawable that scales the bitmap to CenterCrop
* Copyright Prem Nirmal 2016 MIT License
* @author PremNirmal
*/
public class CenterCropBitmapDrawable extends BitmapDrawable {
private final int viewWidth, viewHeight;
public CenterCropBitmapDrawable(Resources res, Bitmap bitmap, int viewWidth, int viewHeight) {
super(res, bitmap);
this.viewWidth = viewWidth;
this.viewHeight = viewHeight;
}
@Override public void draw(Canvas canvas) {
final Matrix drawMatrix = new Matrix();
final int dwidth = getIntrinsicWidth();
final int dheight = getIntrinsicHeight();
final int vwidth = viewWidth;
final int vheight = viewHeight;
float scale;
float dx = 0, dy = 0;
int saveCount = canvas.getSaveCount();
canvas.save();
if (dwidth * vheight > vwidth * dheight) {
scale = (float) vheight/(float) dheight;
dx = (vwidth - dwidth * scale) * 0.5f;
} else {
scale = (float) vwidth/(float) dwidth;
dy = (vheight - dheight * scale) * 0.5f;
}
drawMatrix.setScale(scale, scale);
drawMatrix.postTranslate(Math.round(dx), Math.round(dy));
canvas.concat(drawMatrix);
canvas.drawBitmap(getBitmap(), 0, 0, getPaint());
canvas.restoreToCount(saveCount);
}
}
Verwandte Themen
- 1. Wie kann ich einen Hintergrund mit einem CSS-Element zentrieren?
- 2. Wie kann ich den Hintergrund von Android-Warndialogen ändern?
- 3. Wie kann ich Text zentrieren
- 4. Zentrieren eines CGRect in einer Ansicht
- 5. Zentrieren einer Ansicht in der übergeordneten Ansicht mit Autolayout-Einschränkungen
- 6. Wie kann ich den Titel des Inhaltsverzeichnisses in LaTeX zentrieren?
- 7. Wie kann ich die Ansicht von XML in Android aufblasen?
- 8. Android Ändern Navigation Ansicht Menü Hintergrund
- 9. Wie kann man imageview in einer anderen Ansicht richtig zentrieren, um einen Rahmen zu erstellen?
- 10. Android: Kann ich den Bildlauf nicht auf diese Ansicht einstellen?
- 11. kann ich den schwarzen hintergrund einer iphone app ändern?
- 12. Wie ändere ich den Hintergrund eines Android-Tab-Widgets? erstreckt
- 13. Wie kann ich diese Ansicht auf Android mit XML replizieren?
- 14. zentrieren Sie Text auf einer Markierungskarte android
- 15. Wie kann ich meine Navigation zentrieren?
- 16. Wie kann ich die Überschrift zentrieren?
- 17. Wie kann ich eine Zeichenfolge zentrieren?
- 18. Wie kann ich Menütaste für slicknav zentrieren?
- 19. Wie kann ich ein Etikett vertikal zentrieren?
- 20. Wie kann ich eine UIView horizontal zentrieren?
- 21. So zentrieren Sie ein NSTextField in einer Ansicht
- 22. Wie setze ich den Hintergrund von Android PopupMenu auf Weiß
- 23. Wie kann man den Hintergrund unendlich bewegen?
- 24. Android: Wie Aktivitätslabel zu zentrieren
- 25. Wie kann ich Bluetooth-Verbindung im Hintergrund in Android ausführen?
- 26. Wie kann ich den Android-Emulator brennen?
- 27. Cocos-2DX v3 Zentrieren Hintergrund Sprite Probleme
- 28. Wie kann ich den Titel einer Aktionsleiste in Android ändern?
- 29. NSLayoutConstraints Code zum Zentrieren einer Ansicht und Beibehalten des Seitenverhältnisses
- 30. Zentrieren Menütext in android
können Sie diesen Code hinzufügen, anstatt einen Link setzen? Auf diese Weise werden zukünftige Leser den Code immer noch sehen (falls der Inhalt gelöscht wird). – petey
danke @petey. aktualisiert – Prem