Coder Social home page Coder Social logo

flyjingfish / openimage Goto Github PK

View Code? Open in Web Editor NEW
325.0 7.0 34.0 481.36 MB

🔥🔥🔥查看大图、查看视频、图片浏览器,完美的甚至完胜微信的打开过渡动画,支持手势放大缩小图片,支持下拉手势返回,支持自定义图片加载库,支持自定义视频库,支持自定义所有UI

License: Apache License 2.0

Java 98.08% HTML 0.49% Kotlin 1.44%
bigimageviewer imagepreview

openimage's People

Contributors

flyjingfish avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

openimage's Issues

和Fragment一起使用会有内存泄漏问题

目前我们的应用是单Activity框架,使用navigation来进行导航。Fragment在onDestroyView之后需要销毁界面,但是这个库持有了recyclerView,不让销毁。跟进源码看了一下,库里面注册了acitivity的LifecycleEventObserver,在activity销毁的时候才会释放持有的资源。能否适配Fragment的生命周期?或者提供手动注销释放的办法。

截图
微信图片_20230712114612

设备信息:

  • 手机型号: [e.g. 小米]
  • Android 12
  • OpenImageGlideLib:2.0.1

PhotoViewAttacher 一处逻辑判断产生的问题

描述一下大概怎么回事

在 PhotoViewAttacher https://github.com/FlyJingFish/OpenImage/blob/091015ec414d02f275a6701b21ce0211869de9d8/OpenImageLib/src/main/java/com/flyjingfish/openimagelib/photoview/PhotoViewAttacher.java#L1051C15-L1051C15

float scaleStartViewHW = mStartHeight / ;

如果我的 StartHeight 或者 StartWidth 不传,就会让长图默认缩放到很小。


比较好奇为什么这里要用 mStartHeight mStartWidth 来做比较。这里的大图判断跟初始大小似乎没有关系

双指手势控制图片旋转

详细说明功能
双指放大缩小的基础上,判断手势扭转操作,实现图片的旋转,旋转方式以贴近90° 180° 270° 360°(回正)的形式自适应摆正

截图说明
添加截图最好是 gif 或 视频

点击的图像和最后展示的图像不一致

private void onShowImage(Context context,
ViewHolder holder, ViewGroup recyclerView,
List iconImageList){
int position = holder.getAdapterPosition();
XLog.d( "current position is: " + position);
List datas = new ArrayList<>();
for (int i = 0; i < iconImageList.size(); i++){
IconImage iconImage = iconImageList.get(i);
String imgUrl = iconImage.getPath();
String smallImgUrl = imgUrl.contains(".png") ? imgUrl.replace(".png", "_small.png") : imgUrl;
ImageEntity imageEntity = new ImageEntity(imgUrl,smallImgUrl, 0);
datas.add(imageEntity);
}
OpenImage.with(context)
//点击ImageView所在的RecyclerView(也支持设置setClickViewPager2,setClickViewPager,setClickGridView,setClickListView,setClickImageView,setClickWebView)
.setClickRecyclerView((RecyclerView) recyclerView,new SourceImageViewIdGet() {
@OverRide
public int getImageViewId(OpenImageUrl data, int position) {
return R.id.icon_image;//点击的ImageView的Id或者切换图片后对应的ImageView的Id
}
})
//点击的ImageView的ScaleType类型(如果设置不对,打开的动画效果将是错误的)
.setSrcImageViewScaleType(ImageView.ScaleType.CENTER_CROP,true)
//RecyclerView的数据
.setImageUrlList(datas)
//点击的ImageView所在数据的位置
.setClickPosition(position)
//设置加载失败时显示的图片(可不设置)
.setErrorResId(R.mipmap.ic_launcher)
//设置true后关闭时,将看不到前一页面正在查看的图片(可不设置)
.setShowSrcImageView(true)
//设置切换图片时前一页面跟随滚动(可不设置)
//设置显示关闭按钮(可不设置,默认不显示,打开后默认只在显示图片时显示,因为视频页面默认有返回按钮,如需都要显示可在此基础上传入更多参数)
.setShowClose()
.setGalleryEffect(0)
//设置切换图片监听(可不设置)
.setOnSelectMediaListener(new OnSelectMediaListener() {
@OverRide
public void onSelect(OpenImageUrl openImageUrl, int position) {

                }
            })
            //设置切换大图时的效果(可不设置,本库中目前只有这一个,如需其他效果可参照ScaleInTransformer自行定义效果)
            .addPageTransformer(new ScaleInTransformer())
            .show();
}

我使用上述代码来调用OpenImage库展示图像,使用setClickPosition方法设置的图像下标position和最终展示的图像下标总是相差1,例如点击第3张图像(position = 2),最终却展示第4张图像(position = 3),另外,展示图像的时候这种卡在中间的效果怎么去掉?我只想展示所点击的图像。在这个例子中最奇怪的一点是,总共5张图像,不管我点击最后的三张图像中的哪一张,最后展示的都是如第2张图片所展示的结果,图像卡在第四张和第五张图像的中间
微信图片_20240501151816
微信图片_20240501151825

还是有内存泄露

GC Root: Globalvariable in native code
android.os.ResultReceiver$MyResultReceiverinstanceLeaking: UNKNOWNRetaining 59.3 kB in 929 objectsResultReceiver$MyResultReceiver.this$o
android.app.ExitTransitionCoordinatorinstanceLeaking: UNKNOWNRetaining 58.8 kB in 928 objectsActivityTransitionCoordinator.mResultReceiver
android.app.EnterTransitionCoordinator
instance
Leaking:UNKNOWNRetaining 58.5 kB in 918 objectsEnterTransitionCoordinator.mviewsReadyListener
com.android.internal.view.OneShotPreDrawListenerinstanceLeaking: UNKNOWNRetaining 58.2 kB in 909 objectsOneShotPreDrawListener.mview
com.android.internal.policy.DecorViewinstanceLeaking:YES(View.mContextreferences a destroyed activity)Retaining 58.0 kB in 900 objectsView not part of a window viewhierarchyView.mAttachlnfo is null (viewdetached)View.mWindowAttachCount = 0mContext instance of com.android.internal.policy.DecorContext, wrappingactivity com.flyjingfish.openimagelib.FixAndroid12BugActivity withmDestroyed = trueDecorView.mContentRoot
android.widget.LinearLayout instanceLeaking: YES(DecorView个 is leakingand View.mContext references adestroyed activity)Retaining 2.2 kB in 25 objectsView is part of a window viewhierarchy
View.mAttachInfo is null (viewdetached)View.mWindowAttachCount =0mContextinstance of comflviinafishopenimagelib.FixAndroid12BugActivitywith mDestroyed = trueView.mContext
com.flyjingfish.openimagelib.FixAndroid12BugActivityinstanceLeaking: YES

addMoreView 没有移除,添加两次会崩溃

描述一下大概怎么回事
例如使用什么功能时会这样
addMoreView 没有移除,添加两次会崩溃

如何复现
把复现步骤详细说明说下

OpenImage.with(activity).apply {
setNoneClickView()
setImageUrl(filePath, MediaType.IMAGE)
if (openImageView!=null){
val layoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, 200.pt)
addMoreView(openImageView, layoutParams, MoreViewShowType.IMAGE,true)
}
show()
}

错误日志
把错误日志贴出来

截图说明
添加截图最好是 gif 或 视频

设备信息:

  • 手机型号: [e.g. 小米]
  • Android版本 [e.g. Android 12]
  • 使用的哪个库及其版本 [e.g. OpenImageGlideLib:1.8.8]

对于多ItemType的Rv,如果imageView的id不一样,会导致闪退

如果有一个rv,有两种item,每种item下面都只有一个imageview,但是id不一样,一个id是A,一个是B。rv一共用4个item,也就是4张图片,A,b类型的各2张。
如果我点击A的时候,希望只显示A的两张,点b的时候也只显示b的两张,于是我这么写

     doorstepRvAdapter.setOnCustomItemClickListener(new DoorstepRvAdapter.OnItemClickListener() {
            @Override
            public void onTakePicClick() {
                Intent intent = new Intent(mContext, EventCaptureActivity.class);
                whichRv = 0;
                activityResultLauncher.launch(intent);
            }

            @Override
            public void onShowExampleClick() {
                OpenImage.with(mContext)
                        //点击ImageView所在的RecyclerView(也支持设置setClickViewPager2,setClickViewPager,setClickGridView,setClickListView,setClickImageView,setClickWebView,setNoneClickView)
                        .setClickRecyclerView(binding.rvShopDoorstepPhoto, new SourceImageViewIdGet() {
                            @Override
                            public int getImageViewId(OpenImageUrl data, int position) {
                                return R.id.ivExamplePic;//点击的ImageView的Id或者切换图片后对应的ImageView的Id
                            }
                        })
                        //点击的ImageView的ScaleType类型(如果设置不对,打开的动画效果将是错误的)
                        .setSrcImageViewScaleType(ImageView.ScaleType.CENTER_CROP, true)
                        //RecyclerView的数据
                        .setImageUrlList(doorstepRvAdapter.getData())
                        //点击的ImageView所在数据的位置
                        .setClickPosition(position)
                        //开始展示大图
                        .show();
            }

            @Override
            public void onUploadPicLongClick(int position) {
                doorstepRvAdapter.remove(position);
            }

            @Override
            public void onUploadPicClick(int position) {
                OpenImage.with(mContext)
                        //点击ImageView所在的RecyclerView(也支持设置setClickViewPager2,setClickViewPager,setClickGridView,setClickListView,setClickImageView,setClickWebView,setNoneClickView)
                        .setClickRecyclerView(binding.rvShopDoorstepPhoto, new SourceImageViewIdGet() {
                            @Override
                            public int getImageViewId(OpenImageUrl data, int position) {
                                return R.id.ivUploadPic;//点击的ImageView的Id或者切换图片后对应的ImageView的Id
                            }
                        })
                        //点击的ImageView的ScaleType类型(如果设置不对,打开的动画效果将是错误的)
                        .setSrcImageViewScaleType(ImageView.ScaleType.CENTER_CROP, true)
                        //RecyclerView的数据
                        .setImageUrlList(doorstepBeanList)
                        //点击的ImageView所在数据的位置
                        .setClickPosition(position)
                        //开始展示大图
                        .show();
            }
        });

imageview的id、position都对,但是点击Bitem时会报错,我排查后原因如下:
在OpenImage4ParseData.initShareView这个方法,有一段这样的代码,如果找不到image则直接返回null
image
如果返回了null,则会直接抛出异常,app就会闪退。
我觉得这样写有点问题,如果找不到的话应该去下一个rv的item找,而不是直接返回null。这样在多itemType的RV工作会异常

双指放大,放大后的图片旋转

描述一下大概怎么回事
双指放大,放大后的图片旋转
Gif压的有点模糊

如何复现
使用CameraX拍照后的照片,正常点击浏览正常,双指放大后图片旋转

错误日志
把错误日志贴出来

截图说明
屏幕录制2023-09-15 11 14 48

设备信息:

  • 手机型号: RMX3370
  • Android版本 Android 13
  • 使用的哪个库及其版本 OpenImageFullLib:2.1.4

优先加载缩略图

详细说明功能

同时存在缩略图与大图在图片浏览的时候应该挺普遍的,希望能在缩略图存在的时候,优先加载缩略图,然后加载大图。

关于查看大图后父Activity的返回动画被修改的问题

如gif图所示,当我从首页进入到RecyclerView的Activity再返回时,返回动画是正常的从左到右退出;
但当我查看大图之后,RecyclerView的Activity的返回动画就变成了淡出退出了,我实际应用到项目里也有这个问题。
我希望父Activity保留原来的返回动画,所以不知道大佬是否有解决方案,或者可以修复一下这个问题?

Screenrecorder-2023- -big-original

是否支持设置图片的清晰度?显示的图片比实际模糊

问题描述:
打开图片查看,图片不清晰
//在点击时调用(以下以RecyclerView为例介绍)
OpenImage.with(MainActivity.this)
//打开大图页面时没有点击的ImageView则用这个
.setNoneClickView()
//图片的数据
.setImageUrlList(datas)
//默认展示数据的位置
.setClickPosition(datas.size()-1)
//开始展示大图
.show();

设备信息:

  • Android TV 测试机
  • Android版本 13
  • 库版本 OpenImageFullLib:2.2.1

设置大图视频不旋转

描述一下大概怎么回事
设置大图视频不旋转,即隐藏全屏按钮,有对应的api吗,还是需要自己自定义实现

RecyclerView的动画问题

当我的recyclerView是一个反序列表的时候,退出查看大图模式后的动画,返回到的图片在列表中的位置是错误的

左右滑动过于敏感

详细说明功能
左右滑动过于敏感,缩放图片会导致图片左右滑动误触,能否修改滑动阻尼

截图说明
添加截图最好是 gif 或 视频

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.