El marco de visualización de imágenes de PictureViewer entra en conflicto con Glide

El marco de visualización de imágenes de PictureViewer entra en conflicto con Glide


imagen cabeza arriba

prefacio

Próximamente, se agregará una nueva función al proyecto de la compañía, que es hacer clic en la imagen para ampliarla y descargarla. Pensando en ello en mi mente, había un marco de visualización de imágenes de terceros, PictureViewer, en un proyecto anterior. Es bastante conveniente de usar y puede comenzar a usarlo sin decir una palabra. Como resultado, estuve perplejo toda la tarde debido al marco de carga de imágenes Glide. Glide en el proyecto entra en conflicto con Glide en pictureViewer. Se resolvió después de algunos lanzamientos.

Causa de

El marco de PictureViewer y el marco utilizado por el proyecto no son la misma versión de Glide. Uso Glide 4.8.0 en el proyecto
Glide.png en el proyecto
y Glide 3.7.0 en el framework pictureView, y la actualización en GitHub todavía está en 2017. Se estima que ya no se mantiene, pero este framework no es muy grande. difícil escribir uno bueno, pero a los programadores nos gusta ser perezosos hhhhh.
Versión de Framework Glide en gitHub.png

Solución

También dediqué mucho tiempo a la solución. Intenté cambiar el marco, pero todavía parece ser el mismo después de cambiar. También trató de resolver los conflictos en las dependencias

implementation ('com.github.SuperKotlin:PictureViewer:2.0.1'){
          exclude group: 'com.github.bumptech.glide'
}

Pero todavía no resolvió este problema. De ninguna manera, solo se puede usar el último método. Descargue el proyecto en GitHub y agréguelo a su propio proyecto, y luego modifique la versión de Glide dentro. ¿Entonces lo que hay que hacer?

primer paso

Primero descargue GitHub a la computadora, dirección: Dirección de PictureViewer GitHub
visor de imágenes.png
y luego descomprima, descomprima, abra Android Studio en el proyecto> haga clic en Archivo> mueva el mouse a Nuevo> mueva a Importar módulo y haga clic

1.png

Agregue la dirección de PictureViewer que descargó y descomprimió al proyecto> luego haga clic en Finalizar (ya lo he agregado, por lo que no se puede hacer clic en Finalizar) y luego
2.png
agregue la siguiente oración a las dependencias en el gradle del proyecto, completando así la importación del Módulo.

  //图片查看器
    implementation project (':PictureViewer')

Paso 2: Modificar el código interno

Primero reemplace Glide con la misma versión utilizada en el proyecto:
ubicación.png

implementation 'com.github.bumptech.glide:glide:4.8.0'

Luego encontrará que hay un error en el marco:
Interfaz de error.png
la razón es que cuando actualiza a Glide V4, Glide modifica y elimina algunos métodos. Consulte este artículo
o el documento oficial de Glide V4.
En Glide V4, .asBitmap() se coloca después de .with(). La imagen de marcador de posición y la animación de transición, etc. también se han modificado y no hay un método SimpleTarget. entonces que debemos hacer? No te preocupes, aunque no tiene SimpleTarget, todavía tiene el método SimpleTarget, solo necesitamos convertirlo.

Después de la modificación (comentado es el código anterior)

if (!TextUtils.isEmpty(mImageUrl)) {
    
    
            /*Glide.with(getActivity())
                    .load(mImageUrl)
                    .asBitmap()
                    .placeholder(mImageLoading)
                    .into(new SimpleTarget<Bitmap>() {
                        @Override
                        public void onResourceReady(Bitmap bitmap, GlideAnimation<? super Bitmap> glideAnimation) {
                            mBitmap = bitmap;
                            mImageView.setImageBitmap(mBitmap);
                            mAttacher.update();
                        }
                    });*/
            DrawableCrossFadeFactory drawableCrossFadeFactory = new DrawableCrossFadeFactory.Builder().setCrossFadeEnabled(true).build();
            Glide.with(getActivity())
                    .load(mImageUrl)
                    .apply(new RequestOptions().placeholder(mImageLoading))
                    .transition(DrawableTransitionOptions.with(drawableCrossFadeFactory))
            .into(new SimpleTarget<Drawable>() {
    
    
                @Override
                public void onResourceReady(@NonNull Drawable resource, @Nullable Transition<? super Drawable> transition) {
    
    
                    mBitmap=drawableToBitmap(resource);
                    mImageView.setImageBitmap(mBitmap);
                    mAttacher.update();
                }
            });

También hay un método para convertir Drawable a Bitmap.

    /**
     * Drawable转换成一个Bitmap
     *
     * @param drawable drawable对象
     * @return
     */
    public static final Bitmap drawableToBitmap(Drawable drawable) {
    
    
        Bitmap bitmap = Bitmap.createBitmap( drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(),
                drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565);
        Canvas canvas = new Canvas(bitmap);
        drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
        drawable.draw(canvas);
        return bitmap;
    }

Bueno, después de llegar a este paso, el trabajo está hecho. El siguiente paso es cómo usarlo. De hecho, también es muy simple dar el código directamente: solo tengo una imagen aquí, y solo se pasa una imagen cada vez. El método que definí solo necesita pasar en el contexto y la dirección de la casa del imagen. Si hay varias imágenes, simplemente pase la colección Lista de direcciones de imágenes múltiples. Para obtener más información, consulte este artículo Un hermoso visor de imágenes PictrueViewer

 Tools.showSinglePic(context,Declare.ServerletImgUrl2 + imgUrlList.getFollow_data().get(0).getImages());
    /**
     * 查看单张图片
     * @param imgUrl
     */
    public static void showSinglePic(Context context,String  imgUrl) {
    
    
        ArrayList<String > imgUrls=new ArrayList<>();
        //查看单张,只需要存入一个图片值
        if (imgUrls.size()==0){
    
    
            imgUrls.add(imgUrl);
        }
        PictureConfig config = new PictureConfig.Builder()
                .setListData(imgUrls)    //图片数据List<String> list
                .setPosition(0)    //图片下标(从第position张图片开始浏览)
                .setDownloadPath("RoadFile")    //图片下载文件夹地址
//                .setIsShowNumber(true)//是否显示数字下标
                .needDownload(true)    //是否支持图片下载
                .setPlacrHolder(R.mipmap.btn_add)    //占位符图片(图片加载完成前显示的资源图片,来源drawable或者mipmap)
                .build();
        ImagePagerActivity.startActivity(context, config);
    }

Todo está listo, echemos un vistazo al resultado:
resultado.gif

Resumir

Aunque no hay muchos lugares para modificar, y puede que no sea un método muy riguroso, he estado trabajando en él durante unas horas y siento que el proceso de exploración lenta es bastante bueno, con una ligera sensación de logro. . ¡Ja ja!

La palabra clave no es fácil, ¡por favor dale me gusta!

Supongo que te gusta

Origin blog.csdn.net/weixin_43683367/article/details/103008228
Recomendado
Clasificación