CircleImageView
Eine schnelle kreisförmige ImageView, perfekt für Profilbilder. Dies basiert auf RoundedImageView von Vince Mi, das wiederum auf von Romain Guy empfohlenen Techniken basiert.
Es verwendet einen BitmapShader und nicht :
- Erstellen Sie eine Kopie der ursprünglichen Bitmap
- Verwenden Sie einen ClipPath (der weder hardwarebeschleunigt noch antialiasiert ist).
- Verwenden Sie setXfermode, um die Bitmap auszuschneiden (was bedeutet, dass Sie zweimal auf die Leinwand zeichnen müssen).
Da es sich lediglich um eine benutzerdefinierte ImageView und nicht um eine benutzerdefinierte Drawable oder eine Kombination aus beidem handelt, kann sie mit allen Arten von Drawables verwendet werden, z. B. einem PicassoDrawable von Picasso oder anderen nicht standardmäßigen Drawables (bedarf allerdings einiger Tests).
Gradle
dependencies {
...
implementation 'de.hdodenhof:circleimageview:3.1.0'
}
Verwendung
< de .hdodenhof.circleimageview.CircleImageView
xmlns : app = " http://schemas.android.com/apk/res-auto "
android : id = " @+id/profile_image "
android : layout_width = " 96dp "
android : layout_height = " 96dp "
android : src = " @drawable/profile "
app : civ_border_width = " 2dp "
app : civ_border_color = " #FF000000 " />
Einschränkungen
- Der ScaleType ist immer CENTER_CROP und Sie erhalten eine Ausnahme, wenn Sie versuchen, ihn zu ändern. Dies ist (derzeit) beabsichtigt, da es für Profilbilder völlig in Ordnung ist.
- Die Aktivierung
adjustViewBounds
wird nicht unterstützt, da hierfür ein nicht unterstützter ScaleType erforderlich ist - Wenn Sie eine Bildladebibliothek wie Picasso oder Glide verwenden, müssen Sie deren Überblendungsanimationen deaktivieren, um fehlerhafte Bilder zu vermeiden. Für Picasso verwenden Sie die Option
noFade()
, für Glide verwenden Sie dontAnimate()
. Wenn Sie die FadeIn-Animation beibehalten möchten, müssen Sie das Bild in ein Target
abrufen und beim Empfang der Bitmap
selbst eine benutzerdefinierte Animation anwenden. - Die Verwendung eines
TransitionDrawable
mit CircleImageView
funktioniert nicht richtig und führt zu fehlerhaften Bildern.
FAQ
Wie kann ich ein VectorDrawable
mit CircleImageView
verwenden?
Kurze Antwort: Das sollten Sie nicht. Die Verwendung eines VectorDrawable
mit CircleImageView
ist sehr ineffizient. Sie sollten Ihre Vektoren so ändern, dass sie eine kreisförmige Form haben, und sie stattdessen mit einer regulären ImageView verwenden.
Warum erweitert CircleImageView
AppCompatImageView
nicht?
Die Erweiterung AppCompatImageView
würde das Hinzufügen einer Laufzeitabhängigkeit für die Support-Bibliothek erfordern, ohne dass dies einen wirklichen Nutzen hätte.
Wie kann ich einen an einen Kreis gebundenen Selektor (z. B. Welleneffekt) hinzufügen?
Derzeit gibt es keine direkte Unterstützung für einen kreisgebundenen Selektor, aber Sie können diese Schritte befolgen, um ihn selbst zu implementieren.
Wie kann ich eine Lücke zwischen Bild und Rand hinzufügen?
Das Hinzufügen einer Lücke wird ebenfalls nicht direkt unterstützt, es gibt jedoch einen Workaround.
Änderungsprotokoll
- 3.1.0
- Bitmap-Farbflags mit BitmapDrawable ausrichten (verbessert die Skalierung)
- 3.0.2
- NPE während der Initialisierung auf API-Ebene <= 19 behoben
- Behebung eines falschen Umrisses, der angezeigt wird, wenn die kreisförmige Transformation deaktiviert ist
- 3.0.1
- Behebung, dass das Touch-Ereignis nicht ausgelöst wurde, wenn die Ansicht leer ist
- Der berührbare Bereich wird auf einen Kreis beschränkt, auch wenn die Transformation deaktiviert ist
- 3.0.0
- Beschränken Sie die Verarbeitung von Berührungsereignissen auf den Kreisbereich
- Migrieren Sie zu AndroidX
- Entfernen Sie veraltete Eigenschaften und Methoden
- 2.2.0
- Fügen Sie Unterstützung für die Höhe hinzu
- Fügen Sie das Attribut „Kreis-Hintergrundfarbe“ hinzu, um die Füllfarbe zu ersetzen
- 2.1.0
- Fügen Sie Unterstützung für Polsterung hinzu
- Option hinzufügen, um die zirkuläre Transformation zu deaktivieren
- Beheben Sie, dass unter bestimmten Bedingungen eine Haarlinienlücke zwischen Bild und Rand entsteht
- Behebung von NPE bei Verwendung des Tönungsattributs (das nicht unterstützt wird)
- Füllfarben sollten abgelehnt werden, da sie offenbar für einige Verwirrung sorgen
- 2.0.0
- BREAKING: Benutzerdefinierten XML-Attributen wird jetzt „civ_“ vorangestellt.
- Eleganter Umgang mit inkompatiblen Drawables
- Fügen Sie Unterstützung für eine Füllfarbe hinzu, die hinter Bildern mit transparenten Bereichen angezeigt wird
- Beheben Sie Probleme bei der Dimensionsberechnung bei kleinen Bildern
- Behebung, dass die Bitmap nicht gelöscht wird, wenn sie auf Null gesetzt ist
- 1.3.0
- setBorderColorResource(int resId) hinzufügen
- Anmerkungen zum Ressourcentyp hinzufügen
- Fügen Sie das Attribut „border_overlay“ hinzu, um das Zeichnen eines Rahmens über dem Basisbild zu ermöglichen
- 1.2.2
- Fügen Sie ColorFilter-Unterstützung hinzu
- 1.2.1
- Behebung, dass ColorDrawables auf Lollipop nicht richtig gerendert werden
- 1.2.0
- Unterstützung für setImageURI(Uri uri) hinzufügen
- Behebung, dass die Ansicht bei Verwendung von CircleImageView(Context context) nicht initialisiert wurde
- 1.1.1
- Korrigiert, dass der Rand angezeigt wird, obwohl die Randbreite auf 0 eingestellt ist
- 1.1.0
- Unterstützung für ColorDrawables hinzufügen
- Fügen Sie Getter und Setter für Rahmenfarbe und Rahmenbreite hinzu
- 1.0.1
- Absturz aufgrund von OutOfMemoryError verhindern
- 1.0.0
Lizenz
Copyright 2014 - 2020 Henning Dodenhof
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.