Wie erstellen Sie kreisförmige facebook-Profil-Bild
Ich habe Probleme mit dieser Bibliothek zu machen, eines meiner Bilder in einem Kreis dynamisch. Hier ist mein Versuch:
private void drawerSetup() {
Profile profile = Profile.getCurrentProfile();
ProfilePictureView profilePictureView = (ProfilePictureView) findViewById(R.id.profile_image);
CircularImageView circularProfilePicture = (CircularImageView) findViewById(R.id.profile_image_circle);
if(profilePictureView != null) {
profilePictureView.setProfileId(profile.getId());
ImageView imageView = ((ImageView)profilePictureView.getChildAt(0));
Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap();
circularProfilePicture.setImageBitmap(bitmap);
}
}
Layout:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="200dp"
xmlns:facebook="http://schemas.android.com/apk/res-auto"
xmlns:app="http://schemas.android.com/tools"
android:background="@drawable/side_nav_bar"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:theme="@style/ThemeOverlay.AppCompat.Dark"
android:orientation="vertical"
android:gravity="bottom"
app:showIn="@layout/activity_news_feed">
<com.facebook.login.widget.ProfilePictureView
android:id="@+id/profile_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
facebook:com_facebook_preset_size="normal"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:paddingBottom="8dp"
android:layout_centerInParent="true" />
<com.mikhaellopez.circularimageview.CircularImageView
android:layout_width="100dp"
android:layout_height="100dp"
app:border_color="#EEEEEE"
app:border_width="2dp"
app:shadow="true"
app:shadow_radius="10"
android:id="@+id/profile_image_circle"
app:shadow_color="#000000"
android:layout_alignBottom="@+id/profile_image"
android:layout_toLeftOf="@+id/profile_image"
android:layout_toStartOf="@+id/profile_image" />
Ich weiß, dass mein profilePictureView
ist die Anzeige korrekt, wenn ich rufe profilePictureView.setProfileId(profile.getId());
Auf mein layout korrekt angezeigt wird. Allerdings, wenn ich versuche zu nennen, die circularProfilePicture, werde ich einfach ein "leeres" Foto. Es scheint nicht, wie die bitmap für das Bild nicht erkannt/korrekt eingestellt. Das Bild wird nicht angezeigt, da die profilePictureView
tut. Irgendwelche Ideen, warum dies passieren könnte?
- welche lib hast du benutzt ? Immer so viel Informationen wie möglich. Auch habe man sich in logcat ? gibt es eine Ausnahme erhöhen ?
- stackoverflow.com/questions/23464707/...
- Seine schauen, wie es ist zu warten, für Bild-Antwort. versuchen Sie, Bild nach einer Verzögerung.
- es war keine Ausnahme (nicht, dass ich mir bewusst bin) und ich war mit github.com/lopspower/CircularImageView library. Wie würde ich eine solche Verzögerung?
- Verwenden
Timer
Klasse - Wenn Sie
profilePictureView
für die Nutzer Bild, ist es wirklich sendet eine Asynchrone HTTP-Anforderung zum abrufen der Daten, auf die nächste Zeile, Sie werden immer die bitmap festgelegt, die von denprofilePictureView
welches standardmäßig leer. Das ist, warum Sie keine Bild in IhremCircularView
. Bibliothek funktioniert wie erwartet, versuchte ich mich selbst. - Zur Einführung eine kleine Verzögerung, bevor man das Bild in
CircularView
verwenden Sie entweder dieHandler
postDelayed
Methode oder [Timer](developer.android.com/reference/java/util/..., lange, lange)), um die Einführung einer kleinen Verzögerung, bevor man das Bild inCircularView
verwenden Sie entweder dieHandler
postDelayed
Methode oderTimer
Klasse für die Einführung von delay-Klasse für die Einführung verzögern
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach mit verschiedenen Bild-Bibliothek (darunter Picasso), beendete ich die nutzen Facebook namens Fresco. Es ist viel schneller und mit weniger code, alles funktioniert wie es sollte.
Fresko-Unterstützung:
Der doc sagt auch, dass
Es unterstützt auch die abgerundete Ecke, wie Sie suchen, finden Sie hier.
Layout-Beispiel:
Hinweis: vergessen Sie nicht, rufen
Fresco.initialize(this);
irgendwo (normalerweise in Ihrer Anwendung Klasse).Ich sollte auch bemerken, dass Fresco aktuell hinzufügen 2.6 Mb auf Ihre Bewerbung mit ProGuard. Sie können wählen, um eine andere Bibliothek wie Gleiten, wenn Sie wollen, weniger Funktionalität.
setUri
Funktion selbst oder wenn ich den Ladebildschirm code irgendwo in der Aktivität.Kann ich nicht helfen, aber bemerken die meisten Antworten zu Fragen, Sie zu nutzen, 2 Bibliotheken, 1 für das laden der Bild und 2. für die Anzeige. Ihr Ziel als Entwickler sollte immer sein, um Ihre Aufgabe mit der minimalen Anzahl von Bibliotheken und hier ist eine Lösung, muss nur 1 Bibliothek. Ich werde Gleiten hier seit speichert es die Bilder, die genau für die Größe, die Sie brauchen. Ich habe nicht verwendet, Fresko, so kann nicht kommentieren es aber HIER etwas auf Picasso vs. Glide
Schritt 1
Erstellen Ihr layout
Dies ist, was mein Layout aussieht, merke ich, verwendet ein schlichter Bildansicht anstelle einer schicken Bibliothek. Fühlen Sie sich frei, zu justieren, um Ihre Bedürfnisse anzupassen.
Schritt 2
Schreiben Sie eine benutzerdefinierte Transformation zu konvertieren, ein quadratisches Bild in ein Kreis-Bild. Glide verwendet so genannte Transformationen zu lassen, das Sie Bearbeiten die Bilder nach, was Sie brauchen. Lesen DIESE post für das, was Transformationen sind und Lesen DIESE post zu spielen mit einigen benutzerdefinierte Transformationen. In unserem Fall unsere transformation-Klasse sieht wie folgt aus.
Schritt 3
Laden Sie ein Bild in das layout mit der Glide. Admin ist ein Objekt, das enthält details wie z.B. name, E-Mail, Profilbild url etc, mDrawer ist ein Verweis auf die NavigationView. Beachten Sie, wie Glide verwendet die transformation in Schritt 2 definiert haben, zu erreichen das kreisförmige Bild-Effekt.
Schritt 4
Lehnen Sie sich zurück und genießen Sie die show. Ich bin auch das laden der Daten aus Facebook, lassen Sie mich wissen, wenn Sie noch immer Probleme 🙂
Ich erreichen dies durch die Verwendung
PICASSO library
.Keine Notwendigkeit zu verwenden
CircularImageView
Hier ist mein code:
Hoffe, es wird für Sie arbeiten.
versuchen, diese
shape.xml
out put
Versuchen, diese Bibliothek: https://github.com/hdodenhof/CircleImageView. Ich habe versucht mehrere alternativen, und dieser war der glückliche Gewinner.