Android
Fresco
Zoeken…
Invoering
Fresco is een krachtig systeem voor het weergeven van afbeeldingen in Android-applicaties.
In Android 4.x en lager plaatst Fresco afbeeldingen in een speciale regio van Android-geheugen (ashmem genoemd). Hierdoor kan uw applicatie sneller werken - en veel minder vaak last hebben van de gevreesde OutOfMemoryError.
Fresco ondersteunt ook het streamen van JPEG's.
Opmerkingen
Hoe afhankelijkheden in het build.gradle-bestand op app-niveau in te stellen:
dependencies {
// Your app's other dependencies.
compile 'com.facebook.fresco:fresco:0.14.1' // Or a newer version if available.
}
Meer informatie vindt u hier .
Aan de slag met Fresco
Voeg eerst Fresco toe aan je build.gradle
zoals getoond in de sectie Opmerkingen:
Als u extra functies nodig hebt, zoals ondersteuning voor geanimeerde GIF of WebP, moet u ook de bijbehorende Fresco-artefacten toevoegen.
Fresco moet worden geïnitialiseerd. U moet dit maar 1 keer doen, dus het is een goed idee om de initialisatie in uw Application
plaatsen. Een voorbeeld hiervan zou zijn:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
}
}
Als u externe afbeeldingen van een server wilt laden, heeft uw app de interne machtiging nodig. Voeg het eenvoudig toe aan uw AndroidManifest.xml
:
<uses-permission android:name="android.permission.INTERNET" />
Voeg vervolgens een SimpleDraweeView
aan uw XML-lay-out. Fresco biedt geen ondersteuning voor wrap_content
voor afbeeldingsdimensies, omdat u mogelijk meerdere afbeeldingen met verschillende dimensies heeft (tijdelijke aanduiding, wrap_content
, werkelijke afbeelding, ...).
U kunt dus een SimpleDraweeView
met vaste afmetingen (of match_parent
) toevoegen:
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/my_image_view"
android:layout_width="120dp"
android:layout_height="120dp"
fresco:placeholderImage="@drawable/placeholder" />
Of geef een beeldverhouding voor uw afbeelding:
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/my_image_view"
android:layout_width="120dp"
android:layout_height="wrap_content"
fresco:viewAspectRatio="1.33"
fresco:placeholderImage="@drawable/placeholder" />
Ten slotte kunt u uw afbeeldings-URI in Java instellen:
SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);
draweeView.setImageURI("http://yourdomain.com/yourimage.jpg");
Dat is het! U zou uw tijdelijke aanduiding moeten kunnen zien tekenen totdat de netwerkafbeelding is opgehaald.
OkHttp 3 gebruiken met Fresco
Eerst moet je, naast de normale Fresco Gradle-afhankelijkheid, de OkHttp 3-afhankelijkheid toevoegen aan je build.gradle
:
compile "com.facebook.fresco:imagepipeline-okhttp3:1.2.0" // Or a newer version.
Wanneer u Fresco initialiseert (meestal in uw aangepaste Application
implementatie), kunt u nu uw OkHttp-client opgeven:
OkHttpClient okHttpClient = new OkHttpClient(); // Build on your own OkHttpClient.
Context context = ... // Your Application context.
ImagePipelineConfig config = OkHttpImagePipelineConfigFactory
.newBuilder(context, okHttpClient)
.build();
Fresco.initialize(context, config);
JPEG-streaming met Fresco met behulp van DraweeController
In dit voorbeeld wordt ervan uitgegaan dat u Fresco al aan uw app hebt toegevoegd (zie dit voorbeeld ):
SimpleDraweeView img = new SimpleDraweeView(context);
ImageRequest request = ImageRequestBuilder
.newBuilderWithSource(Uri.parse("http://example.com/image.png"))
.setProgressiveRenderingEnabled(true) // This is where the magic happens.
.build();
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setImageRequest(request)
.setOldController(img.getController()) // Get the current controller from our SimpleDraweeView.
.build();
img.setController(controller); // Set the new controller to the SimpleDraweeView to enable progressive JPEGs.