2

そこにクラスPicassoが存在しRequestHandlerます。RequestHandlersにカスタムを追加できますPicasso

これは でどのように行うことができGlideますか?

たとえば、次の URI をカスタムで処理できるようにしますRequestHandler"appicon:custom_data_to_interprete_manually"

編集 - 私がこれまでに持っているもの

    public class GlideConfiguration implements GlideModule {

    @Override
    public void applyOptions(Context context, GlideBuilder builder) {
        // Apply options to the builder here.
        builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
    }

    @Override
    public void registerComponents(Context context, Glide glide) {
        glide.register(CustomModelParams.class, CustomModelParams.class, new CustomFactory());
    }

    class CustomModelParams
    {
        final String data;

        public CustomModelParams(String data)
        {
            this.data = data;
        }

        public String getId()
        {
            return data;
        }
    }

    class CustomFactory implements ModelLoaderFactory<CustomModelParams, CustomModelParams>
    {
        @Override
        public ModelLoader<CustomModelParams, CustomModelParams> build(Context context, GenericLoaderFactory loaderFactory) {
            return new CustomModelLoader();
        }

        @Override
        public void teardown() {
        }
    }

    class CustomModelLoader implements ModelLoader<CustomModelParams, CustomModelParams>
    {
        public CustomModelLoader() {
            super();
        }

        @Override
        public DataFetcher<CustomModelParams> getResourceFetcher(final CustomModelParams model, int width, int height)
        {
            return new DataFetcher<CustomModelParams>()
            {
                @Override
                public CustomModelParams loadData(Priority priority) throws Exception { return model; }
                @Override
                public void cleanup() { }
                @Override
                public String getId() { return model.getId(); }
                @Override
                public void cancel() { }
            };
        }
    }

    class CustomBitmapDecoder implements ResourceDecoder<CustomModelParams, Bitmap>
    {
        private final Context context;

        public CustomBitmapDecoder(Context context)
        {
            this.context = context;
        }

        @Override
        public Resource<Bitmap> decode(CustomModelParams source, int width, int height) throws IOException
        {
            BitmapPool pool = Glide.get(context).getBitmapPool();
            Bitmap bitmap = pool.getDirty(width, height, Bitmap.Config.ARGB_8888);
            if (bitmap == null) {
                bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
            }

            // TODO
            // create custom bitmap from CustomModelParams!!!

            return BitmapResource.obtain(bitmap, pool);
        }

        @Override
        public String getId()
        {
            return CustomBitmapDecoder.class.getName();
        }
    }
}

質問

  • これらのクラスを一緒にリンクするにはどうすればよいですか? デコーダーは何らかの方法で新しいモデルにリンクする必要があります
  • カスタム ローダーがリクエストを処理できるように定義するにはどうすればよいですか? 取得したURLがこのローダーで処理できるかどうかをどうにかして判断する必要があります...
4

2 に答える 2

0

ModelLoadersを使用できます。カスタム ModelLoader の例については、カスタム サイズのダウンロード wikiを参照してください。BaseGlideUrlLoader の代わりに、特定のデータ モデルを処理する ModelLoader を登録する必要があることに注意してください。

于 2015-09-10T23:25:33.327 に答える