-
Notifications
You must be signed in to change notification settings - Fork 44
常见问题
FlyJingFish edited this page Nov 21, 2024
·
15 revisions
- 答:数据无需筛选掉其他数据(所有数据需要实现 OpenImageUrl 接口),然后所有适配器中的数据直接传入即可,其他数据的 getType 返回 MediaType.NONE
-
答: 传入RecyclerView(ListView)之后调用 setClickPosition(int clickDataPosition, int clickViewPosition)即可。参数该怎么传呢?
- 答案是 如果你想传很多图片或视频数据包括 RecyclerView(ListView)的适配器中的没有的数据,那么clickDataPosition就是当前点击的View显示的数据在您所传数据中的位置(就是调用setImageUrlList所传数据中的位置),clickViewPosition依旧是点击的位置(适配器中的位置)。
-
PS:另外很重要的一点,在适配器中不是图片或视频的也需要把这部分数据传进来,MediaType返回NONE,因为要让数据和View的位置有个对应关系。详细可以看Demo MsgLvAdapter
- 答:大多数是因为ImageView所在的容器刷新了,例如RecyclerView的Adapter刷新后ImageView就会被回收,页面在返回时已经找不到传入的ImageView了,所以就没有效果了,这种情况下强烈建议不采用这种方式,而是传入所在的容器,如果点击的ImageView是在RecyclerView(ListView、ViewPager、ViewPager2)中,可以参考问题2。
- 答:调用setWechatExitFillInEffect传入true,就可以获得这个效果了
- 答:调用setShowSrcImageView传入false,就可以获得这个效果了
- 答:本项目用的 Glide 版本是 4.12.0 如果您项目中的版本低于这个版本可以升级至这个版本及其以上或者引用OpenImageLib自定义版本号
- 答:本项目用的 Glide 版本是 4.12.0 如果您项目中的版本低于这个版本可以升级至这个版本及其以上或者引用OpenImageLib自定义版本号
- 答:本项目用的 GSYVideoPlayer 版本是 8.3.3 如果您项目中的版本低于这个版本可以升级至这个版本及其以上或者引用OpenImageLib自定义版本号
-
A,优先使用OpenImage中的addMoreView去添加您的UI
-
B,您可多次实现ImageFragmentCreate接口和BaseImageFragment页面,并且在调用显示的地方调用OpenImage中的setImageFragmentCreate设置即可
-
A,优先使用OpenImage中的addMoreView去添加您的UI
-
B,您可多次实现VideoFragmentCreate接口和BaseImageFragment页面,并且在调用显示的地方调用OpenImage中的setVideoFragmentCreate设置即可
- 可看这个wiki文档 点此查看
12、使用OpenImageLib自定义大图引擎,出现 内存溢出 或者大图加载不出来 或者 出现 “trying to draw too large(330750000bytes) bitmap” 报错信息,该怎么办?
-
答:请引用OpenImageGlideLib库,此库针对此问题作出了优化。如果您使用的是Glide之外的图片引擎,可参考OpenImageGlideLib代码
-
如果你用的是Picasso 可参考
1> 请确保是否调用了setClickPosition并且参数设置正确,或 SourceImageViewIdGet 返回的 ImageView 的Id正确
2> 请确保是否调用了setClickPosition并且参数设置正确,SourceImageViewGet 返回的 ImageView 不能为null
3> 请确保是否调用了setClickPosition并且参数设置正确,或所传ImageView个数是否正确
这说明无法正确获取到点击的ImageView,原因有以下几个请自行排查
1> 确保数据正确设置了数据类型,如果你的数据实现了 OpenImageUrl 接口,并且正确重写了 getType ,返回的类型也是对的
2> 确保 setClickPosition 设置的位置正确,请仔细参阅读上边的 问题2 来排查问题原因
3> 所传 View 数量小于 setClickPosition 所设置的位置(即数据和View数量不相等时),请参考上边的 问题2 来排查问题原因
4> 确保返回的图片 id 是正确的,如果你的列表中有多个图片Id,请根据您的实际情况自行排查问题,
例如以下代码是因为视频和图片的ImageView 的 Id 不一样
new SourceImageViewIdGet<OpenImageUrl>() {
@Override
public int getImageViewId(OpenImageUrl data, int position1) {
MessageBean msgBean = (MessageBean) data;
//图片和视频显示的 ImageView 的 id 不一样也可以,根据数据类型返回即可
if (msgBean.type == MessageBean.IMAGE){
return R.id.iv_image;
}else {
return R.id.iv_video;
}
}
}
- 答:
app的module下引入 coil-gif
你的 Application 实现 ImageLoaderFactory 并设置它
implementation("io.coil-kt:coil-gif:2.4.0")
public class MyApplication extends Application implements ImageLoaderFactory { @NonNull @Override public ImageLoader newImageLoader() { ComponentRegistry.Builder builder = new ComponentRegistry.Builder(); if (SDK_INT >= 28) { builder.add(new ImageDecoderDecoder.Factory()); } else { builder.add(new GifDecoder.Factory()); } return new ImageLoader.Builder(this).logger(new DebugLogger()) .okHttpClient(CoilLoadImageUtils.INSTANCE.getOkHttpClient()) .components(builder.build()) .build(); } }
- 答:这项已被废弃,不用设置
- 答:参考这里定义一下大图页面,给页面的根组件加上这句
android:layoutDirection="ltr"
/**
* 设置为true表示视频可以缩放,设置为false表示视频不可缩放恢复为之前到设置
*/
VideoPlayerFragment.Scaling = false;