Bilibili address:
Where did the video go? _bilibili_bilibili
rely
implementation 'com.ycjiang:ImagePreview:2.3.5'
Create image initialization class
TestImageLoader
package com.anguomob.market.utils;
import android.content.Context;
import android.graphics.Bitmap;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.engine.GlideException;
import com.bumptech.glide.load.resource.gif.GifDrawable;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.SimpleTarget;
import com.bumptech.glide.request.target.Target;
import com.bumptech.glide.request.transition.Transition;
import com.previewlibrary.loader.IZoomMediaLoader;
import com.previewlibrary.loader.MySimpleTarget;
public class TestImageLoader implements IZoomMediaLoader {
@Override
public void displayImage(@NonNull Fragment context, @NonNull String path, final ImageView imageView, @NonNull final MySimpleTarget simpleTarget) {
Glide.with(context)
.asBitmap()
.load(path)
.apply(new RequestOptions().fitCenter())
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
simpleTarget.onResourceReady();
imageView.setImageBitmap(resource);
}
});
}
@Override
public void displayGifImage(@NonNull Fragment context, @NonNull String path, ImageView imageView, @NonNull final MySimpleTarget simpleTarget) {
Glide.with(context)
.asGif()
.load(path)
//可以解决gif比较几种时 ,加载过慢 //DiskCacheStrategy.NONE
.apply(new RequestOptions().diskCacheStrategy(DiskCacheStrategy.RESOURCE).dontAnimate())
//去掉显示动画
.listener(new RequestListener<GifDrawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<GifDrawable> target, boolean isFirstResource) {
simpleTarget.onResourceReady();
return false;
}
@Override
public boolean onResourceReady(GifDrawable resource, Object model, Target<GifDrawable> target, DataSource dataSource, boolean isFirstResource) {
simpleTarget.onLoadFailed(null);
return false;
}
})
.into(imageView);
}
@Override
public void onStop(@NonNull Fragment context) {
Glide.with(context).onStop();
}
@Override
public void clearMemory(@NonNull Context c) {
Glide.get(c).clearMemory();
}
}
This initialization if your app has its own
The MyApplication class can be written inside to initialize
Otherwise, it needs to be written in the main or the onCreate method on the used page.
ZoomMediaLoader.getInstance().init(TestImageLoader())
The next step is to write a user-defined data bean
MarketPropaganda
The content is also very simple. Implement the IThumbViewInfo interface and override the fields to be written
import android.graphics.Rect
import android.os.Parcel
import android.os.Parcelable
import androidx.annotation.Nullable
import com.previewlibrary.enitity.IThumbViewInfo
/**
*
* @author ludoven
* @date 2020/4/22
* Deprecated: 图片预览实体类
*/
class MarketPropaganda : IThumbViewInfo {
//图片地址
private var url: String
// 记录坐标
private var mBounds: Rect? = null
private var videoUrl: String? = null
constructor(url: String) {
this.url = url
}
constructor(videoUrl: String?, url: String) {
this.url = url
this.videoUrl = videoUrl
}
override fun getUrl(): String { //将你的图片地址字段返回
return url
}
fun setUrl(url: String) {
this.url = url
}
override fun getBounds(): Rect? { //将你的图片显示坐标字段返回
return mBounds
}
@Nullable
override fun getVideoUrl(): String? {
return videoUrl
}
fun setBounds(bounds: Rect?) {
mBounds = bounds
}
fun setVideoUrl(videoUrl: String?) {
this.videoUrl = videoUrl
}
override fun describeContents(): Int {
return 0
}
override fun writeToParcel(dest: Parcel, flags: Int) {
dest.writeString(url)
dest.writeParcelable(mBounds, flags)
dest.writeString(videoUrl)
}
protected constructor(`in`: Parcel) {
url = `in`.readString()!!
mBounds = `in`.readParcelable(Rect::class.java.classLoader)
videoUrl = `in`.readString()
}
companion object CREATOR : Parcelable.Creator<MarketPropaganda> {
override fun createFromParcel(parcel: Parcel): MarketPropaganda {
return MarketPropaganda(parcel)
}
override fun newArray(size: Int): Array<MarketPropaganda?> {
return arrayOfNulls(size)
}
}
}
to the usage section
marketPropagandas.forEachIndexed { index, data ->
//取出ImageView
val iv = arrayImageView.get(index)
//取出数据bean
val marketPropaganda = marketPropagandas.get(index);
iv.setOnClickListener {
val location = IntArray(2)
iv.getLocationOnScreen(location)
marketPropaganda.bounds =
Rect(
location[0],
location[1] ,
location[0] + iv.width,
location[1] + +iv.height
)
GPreviewBuilder.from(this)
.setData(marketPropagandas)
.setCurrentIndex(index)
.setSingleFling(true)//是否在黑屏区域点击返回
.setDrag(true)//是否禁用图片拖拽返回
.setType(GPreviewBuilder.IndicatorType.Dot)
.start()
}
}
Calculate the location and use. For more detailed tutorials, please refer to Bilibili!