flyjingfish / openimage Goto Github PK
View Code? Open in Web Editor NEW🔥🔥🔥查看大图、查看视频、图片浏览器,完美的甚至完胜微信的打开过渡动画,支持手势放大缩小图片,支持下拉手势返回,支持自定义图片加载库,支持自定义视频库,支持自定义所有UI
License: Apache License 2.0
🔥🔥🔥查看大图、查看视频、图片浏览器,完美的甚至完胜微信的打开过渡动画,支持手势放大缩小图片,支持下拉手势返回,支持自定义图片加载库,支持自定义视频库,支持自定义所有UI
License: Apache License 2.0
描述一下大概怎么回事
float scaleStartViewHW = mStartHeight / ;
如果我的 StartHeight 或者 StartWidth 不传,就会让长图默认缩放到很小。
比较好奇为什么这里要用 mStartHeight mStartWidth 来做比较。这里的大图判断跟初始大小似乎没有关系
详细说明功能
双指放大缩小的基础上,判断手势扭转操作,实现图片的旋转,旋转方式以贴近90° 180° 270° 360°(回正)的形式自适应摆正
截图说明
添加截图最好是 gif 或 视频
详细说明功能
setNoneClickView() 打开、关闭没有过渡动画效果,
能增加过渡效果吗,比如直接从 屏幕中间、左上角等位置 缩放到全屏
能否把权限拦截放出来自己来实现
详细说明功能
详细说明功能是怎么回事
截图说明
添加截图最好是 gif 或 视频
问题:使用.setNoneClickView()时仍会出现:关于查看大图后父Activity的返回动画被修改的问题
建议:针对第三方的类似轮播图的控件,无法设置setClickViewPager情况提供支持,或支持其他通用setClickView
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张图片所展示的结果,图像卡在第四张和第五张图像的中间
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 没有移除,添加两次会崩溃
如何复现
把复现步骤详细说明说下
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 或 视频
设备信息:
如果有一个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
如果返回了null,则会直接抛出异常,app就会闪退。
我觉得这样写有点问题,如果找不到的话应该去下一个rv的item找,而不是直接返回null。这样在多itemType的RV工作会异常
leakcanay监测到退出的时候 ActivityExitTransitionCallbacks.mActivity内存泄漏
详细说明功能
同时存在缩略图与大图在图片浏览的时候应该挺普遍的,希望能在缩略图存在的时候,优先加载缩略图,然后加载大图。
问题描述:
打开图片查看,图片不清晰
//在点击时调用(以下以RecyclerView为例介绍)
OpenImage.with(MainActivity.this)
//打开大图页面时没有点击的ImageView则用这个
.setNoneClickView()
//图片的数据
.setImageUrlList(datas)
//默认展示数据的位置
.setClickPosition(datas.size()-1)
//开始展示大图
.show();
设备信息:
引入的是完整版,但无法找到OpenImage类
描述一下大概怎么回事
设置大图视频不旋转,即隐藏全屏按钮,有对应的api吗,还是需要自己自定义实现
OpenImageUrl接口中的getImageUrl能否使用mipmap/drawable的图片
Hi, I want to custom view when click show image with another button.
How to custom?
Please help me, thank you so much.
详细说明功能
希望viewpager 也能支持SourceImageViewIdGet ,我们这边banner内部使用的是viewpager
截图说明
添加截图最好是 gif 或 视频
当我的recyclerView是一个反序列表的时候,退出查看大图模式后的动画,返回到的图片在列表中的位置是错误的
详细说明功能
左右滑动过于敏感,缩放图片会导致图片左右滑动误触,能否修改滑动阻尼
截图说明
添加截图最好是 gif 或 视频
我的RecyclerView是在activity->fragment->fragment->adapter中的😂我想从这个adapter调用
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.