Android
フレスコ画
サーチ…
前書き
フレスコ画は、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をbuild.gradle
に追加します。
アニメーションGIFやWebPサポートなどの追加機能が必要な場合は、対応するFrescoアーティファクトも追加する必要があります。
フレスコ画を初期化する必要があります。これを1回だけ行う必要があるため、 Application
初期設定を配置することをお勧めします。これの例は次のとおりです。
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
}
}
サーバーからリモートイメージをロードする場合は、アプリケーションにinterntアクセス権が必要です。単にAndroidManifest.xml
追加してください:
<uses-permission android:name="android.permission.INTERNET" />
次に、XMLレイアウトにSimpleDraweeView
を追加します。フレスコ画は、寸法が異なる複数の画像(プレースホルダ画像、エラー画像、実際の画像など)がある可能性があるため、画像寸法のwrap_content
をサポートしていません。
したがって、固定ディメンション(またはmatch_parent
)を持つSimpleDraweeView
を追加することもできます:
<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");
それでおしまい!ネットワークイメージが取得されるまで、プレースホルダードロアブルが表示されます。
フレスコとOkHttp 3を使う
まず、通常のフレスコ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);
DraweeControllerを使用したJPEGによるフレスコ画のストリーミング
この例では、すでにアプリケーションに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.