Android
фреска
Поиск…
Вступление
Fresco - мощная система для отображения изображений в приложениях Android.
В Android 4.x и ниже Fresco помещает изображения в особый регион памяти Android (называемый ashmem). Это позволяет вашему приложению работать быстрее - и страдать от ужасного OutOfMemoryError гораздо реже.
Fresco также поддерживает потоковое воспроизведение JPEG.
замечания
Как настроить зависимости в файле build.gradle на уровне приложения:
dependencies {
// Your app's other dependencies.
compile 'com.facebook.fresco:fresco:0.14.1' // Or a newer version if available.
}
Более подробную информацию можно найти здесь .
Начало работы с Fresco
Сначала добавьте Fresco в свой build.gradle
как показано в разделе «Примечания»:
Если вам нужны дополнительные функции, такие как анимированная поддержка GIF или WebP, вам также необходимо добавить соответствующие артефакты Fresco .
Фреска должна быть инициализирована. Вы должны делать это только 1 раз, поэтому размещение инициализации в вашем Application
- хорошая идея. Примером этого может быть:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
}
}
Если вы хотите загружать удаленные изображения с сервера, вашему приложению требуется разрешение интерната. Просто добавьте его в свой AndroidManifest.xml
:
<uses-permission android:name="android.permission.INTERNET" />
Затем добавьте SimpleDraweeView
в свой XML-макет. Fresco не поддерживает wrap_content
для размеров изображения, поскольку у вас может быть несколько изображений с различными размерами (изображение с образцом, изображение ошибки, фактическое изображение, ...).
Таким образом, вы можете добавить SimpleDraweeView
с фиксированными параметрами (или match_parent
):
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/my_image_view"
android:layout_width="120dp"
android:layout_height="120dp"
fresco:placeholderImage="@drawable/placeholder" />
Или укажите пропорции для вашего изображения:
<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" />
Наконец, вы можете установить свой URI изображения в Java:
SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);
draweeView.setImageURI("http://yourdomain.com/yourimage.jpg");
Это оно! Вы должны увидеть, что ваш placeholder доступен до тех пор, пока изображение сети не будет извлечено.
Использование OkHttp 3 с Fresco
Во-первых, в дополнение к нормальной зависимости Fresco Gradle вам нужно добавить зависимость OkHttp 3 к вашему build.gradle
:
compile "com.facebook.fresco:imagepipeline-okhttp3:1.2.0" // Or a newer version.
Когда вы инициализируете Fresco (обычно в вашей пользовательской реализации Application
), вы можете указать свой клиент OkHttp:
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 с помощью Fresco с помощью DraweeController
В этом примере предполагается, что вы уже добавили Fresco в свое приложение (см. Этот пример ):
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.