sherlockgougou / bigimageviewpager Goto Github PK
View Code? Open in Web Editor NEW🔥🔥🔥 BigImage ImageView ViewPager 支持超长图、超大图的图片浏览器,优化内存,支持手势放大、下拉关闭、查看原图、加载百分比、保存图片等功能。
License: Other
🔥🔥🔥 BigImage ImageView ViewPager 支持超长图、超大图的图片浏览器,优化内存,支持手势放大、下拉关闭、查看原图、加载百分比、保存图片等功能。
License: Other
如保存到阿里云上的图片https://xxxxx.com/201905/1557048731430.jpg?x-oss-process=image/resize,w_400/interlace,1。
会取interlace,1进行md5作为文件名。导致不同的图片的md5都是同一个值,保存覆盖,建议使用时间戳作为文件名
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void java.lang.ref.Reference.clear()' on a null object reference
因为快速点击,会开启了两个ImagePreviewActivity,然后报上述问题
请问现在图片宽度为手机屏幕宽度,但是2个手指不可以再缩小了,请问如何设置2个手指可以再缩小图片后,图片松手后变回原来屏幕宽度;
建议在ImagePreview添加WeakReference wr,弱引用上下文,因为单例容易造成内存泄露
导入新版本,报错AGPBI: {"kind":"error","text":"error:,换回老版本正常,是不是因为框架引入的jar包和我项目中的冲突,新版本加的gif是增添了什么吗
大神,你好,我想问下什么时候可以加个进度条改成数字显示百分比,就是一个白色的边框逐渐形成一个圆圈,中间显示加粗的当前进度百分比,还有,为啥我加了群,没人同意额
展示图片列表时滑动切换之前的没有回收吧,性能差点的手机滑动到10张左右就卡的很,好点的手机能多滑一些,不过多了也会卡
作者大大你好,我想问下加载的百分比可以获取到吗,因为我想加上加载时显示百分比
@SherlockGougou
Thanks to the resources provided by the author, I personally feel that we can optimize the following problems:
The default placeholder when the picture address is empty or the picture can not be successfully loaded.
宽图显示异常,图片被顶到顶部,向下滑下才居中,而且特别宽的图没有整体一起显示,还需要右滑才能看到全部内容
其实就是对subsampling-scale-image-view一个简单的封装嘛。。
超大图、超长图、支持手势放大,区块复用加载这些核心feature都是subsampling-scale-image-view提供的,好歹你也在readme里面提下人家吧?
项目中图片文件都是bimap,请问能传入bitmap查看吗
打开大图,上拉不能关闭,会弹回来,下拉可以
有点击事件监听和长按事件监听吗?没看到有加入这个功能
使用发生崩溃
点击操作调用 ImagePreview.getInstance()
.setContext(CloudPhotoDetailsActivity.this)
// .setIndex(0)
// .setImageList(list) .setImage("https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=1986179278,1118313821&fm=27&gp=0.jpg")
.start();
然后就发生崩溃 图片不能显示
<item name="sh_progress_text" type="id">false</item>
<item name="sh_progress_view" type="id">false</item>
28以后只能这样写
<item name="sh_progress_text" type="id"/>
<item name="sh_progress_view" type="id"/>
https://ws1.sinaimg.cn/large/686c6057ly1g2cltzs406j20f00qoab2.jpg
上面的页码text和关闭按钮显示不出来
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xunqi.mm/cc.shinichi.library.view.ImagePreviewActivity}: java.lang.ClassCastException: com.lzy.ninegrid.preview.HackyViewPager cannot be cast to cc.shinichi.library.view.HackyViewPager
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2593)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2653)
at android.app.ActivityThread.access$900(ActivityThread.java:173)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1431)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:171)
at android.app.ActivityThread.main(ActivityThread.java:5726)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:107)
Caused by: java.lang.ClassCastException: com.lzy.ninegrid.preview.HackyViewPager cannot be cast to cc.shinichi.library.view.HackyViewPager
at cc.shinichi.library.view.ImagePreviewActivity.onCreate(ImagePreviewActivity.java:123)
at android.app.Activity.performCreate(Activity.java:6350)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1121)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2546)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2653)
at android.app.ActivityThread.access$900(ActivityThread.java:173)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1431)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:171)
at android.app.ActivityThread.main(ActivityThread.java:5726)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:107)
小米:mix2s
图片信息:4032x2016px
具体描述:图片在相册显示是竖向的,使用该库就变成了横向的。
视频 能加上去吗?图片与视频并存
.setProgressLayoutId(ImagePreview.PROGRESS_THEME_CIRCLE_TEXT, new OnOriginProgressListener() {
@OverRide public void progress(View parentView, int progress) {
Log.d(TAG, "progress: " + progress);
// 需要找到进度控件并设置百分比,回调中的parentView即是传入的布局的根View,可通过parentView找到进度控件:
ProgressBar progressBar = parentView.findViewById(R.id.sh_progress_view);
TextView textView = parentView.findViewById(R.id.sh_progress_text);
progressBar.setProgress(progress);
String progressText = progress + "%";
textView.setText(progressText);
}
@Override public void finish(View parentView) {
Log.d(TAG, "finish: ");
}
})
打印不出来百分比
javax.net.ssl.SSLHandshakeException(com.android.org.bouncycastle.jce.exception.ExtCertPathValidatorException: Could not validate certificate: Certific
例如: 一共有8张图片,我先点击第八张,然后滑到第七张,继续滑直到第五张时,第五张图片是加载不出来的,一直在转圈圈。
怀疑是图片不是原图,存在抽帧的情况,如何解决呢
glide 4.5
java.lang.NoSuchMethodError: No direct method (I)V in class Lcom/bumptech/glide/util/LruCache; or its super classes (declaration of 'com.bumptech.glide.util.LruCache' appears in /data/app/com.cmiot.logisticswarehouse-ZGK19cyE4HzT7HFVl7U9rw==/split_lib_dependencies_apk.apk)
java.lang.NoSuchMethodError: No virtual method addListener(Lcom/bumptech/glide/request/RequestListener;)Lcom/bumptech/glide/RequestBuilder; in class Lcom/bumptech/glide/RequestBuilder; or its super classes (declaration of 'com.bumptech.glide.RequestBuilder' appears in /data/app/com.vc.app-2/base.apk:classes9.dex)
at cc.shinichi.library.view.ImagePreviewAdapter.instantiateItem(ImagePreviewAdapter.java:201)
at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:1010)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1158)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1092)
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1622)
at android.view.View.measure(View.java:19886)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)
at android.view.View.measure(View.java:19886)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6085)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:143)
at android.view.View.measure(View.java:19886)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6085)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:758)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:640)
at android.view.View.measure(View.java:19886)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6085)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at android.view.View.measure(View.java:19886)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6085)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:758)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:640)
at android.view.View.measure(View.java:19886)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6085)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at com.android.internal.policy.DecorView.onMeasure(DecorView.java:693)
at android.view.View.measure(View.java:19886)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2316)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1407)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1660)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1295)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6400)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:876)
at android.view.Choreographer.doCallbacks(Choreographer.java:688)
at android.view.Choreographer.doFrame(Choreographer.java:623)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:862)
at android.os.Handler.handleCallback(Handler.java:754)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:163)
at android.app.ActivityThread.main(ActivityThread.java:6239)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
定位到的代码 Glide.with(activity).downloadOnly().load(url).addListener(new RequestListener() {
@OverRide public boolean onLoadFailed(@nullable GlideException e, Object model, Target target,
boolean isFirstResource) {
请问一下图片的高度你是怎么设置的,是java动态这样设置吗
LinearLayout.LayoutParams params;
params = new LinearLayout.LayoutParams(width,height);
ll_signle.setLayoutParams(params);
如果是这样设置的,大神能不能告诉我参数width和height的单位是px,pt还是dp,我想使用这种方式设置图片原本的高度,但是就是使用imageview动态设置的高度和您的框架显示的高度有点差别,我现在知道图片的高度是288pt,直接传288进去貌似显示的高度太小了,到底应该288乘以多少然后传参进去呢
No virtual method addListener(Lcom/bumptech/glide/request/RequestListener;)Lcom/bumptech/glide/RequestBuilder; in class Lcom/bumptech/glide/RequestBuilder; or its super classes (declaration of 'com.bumptech.glide.RequestBuilder' appears in /data/app/com.emotte.jzc-1/base.apk:classes3.dex)
11-23 12:54:11.025 27152-27152/com.yf.yftrace.app.dev E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.yf.yftrace.app.dev, PID: 27152
java.lang.NoSuchFieldError: No static field rootView of type I in class Lcc/shinichi/library/R$id; or its superclasses (declaration of 'cc.shinichi.library.R$id' appears in /data/app/com.yf.yftrace.app.dev-1/split_lib_slice_8_apk.apk)
at cc.shinichi.library.view.ImagePreviewActivity.onCreate(ImagePreviewActivity.java:126)
at android.app.Activity.performCreate(Activity.java:6355)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2438)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2545)
at android.app.ActivityThread.access$1100(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1396)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5597)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:771)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:649)
11-23 12:54:11.108 1468-1618/? E/InputDispatcher: channel '827302d com.yf.yftrace.app.dev/com.yf.yftrace.arms.mvp.ui.activity.PestAddActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
11-23 12:54:11.200 393-393/? E/HAL: Dawei load: module=/system/lib64/hw/gralloc.msm8937.so
为啥我的是这样的😂, 依赖都添加了,gradle刷新也没问题。不会是因为我的项目是androidx的问题吧
发现新版本跟旧版本的区别在于build.gradle里少了api 'com.github.SherlockGougou:SherlockUtil:v0.0.5',加上就不会报错了
当使用来自同一来源的图片时,会被Glide自动缓存,但是这个来源的图片经常改变,而Glide的缓存并不会更新,以前用过一个框架就可以禁用缓存,不过那个框架无法查看超大图,所以转成了作者现在的这个框架,希望作者能考虑一下我的建议
我用的'com.github.bumptech.glide:glide:3.7.0 + com.github.SherlockGougou:BigImageViewPager:v3_4.0.1 依赖不上啊
ImagePreview找不到这个类
如何展示本地mipmap下的图片
我用recyleview 嵌套,好像不行,把你这个作为item
1
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xindonshisan.ThireteenFriend/cc.shinichi.library.view.ImagePreviewActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.List.get(int)' on a null object reference
2
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3303)
3
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3411)
4
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:5477)
5
at android.app.ActivityThread.-wrap19(Unknown Source:0)
6
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2000)
7
at android.os.Handler.dispatchMessage(Handler.java:108)
8
at android.os.Looper.loop(Looper.java:166)
9
at android.app.ActivityThread.main(ActivityThread.java:7529)
10
at java.lang.reflect.Method.invoke(Native Method)
11
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
12
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
13
Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.List.get(int)' on a null object reference
14
at cc.shinichi.library.view.ImagePreviewActivity.onCreate(ImagePreviewActivity.java:118)
15
at android.app.Activity.performCreate(Activity.java:7383)
16
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1218)
17
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3256)
18
... 10 more
19
java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.List.get(int)' on a null object reference
20
at cc.shinichi.library.view.ImagePreviewActivity.onCreate(ImagePreviewActivity.java:118)
21
at android.app.Activity.performCreate(Activity.java:7383)
22
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1218)
23
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3256)
24
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3411)
25
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:5477)
26
at android.app.ActivityThread.-wrap19(Unknown Source:0)
27
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2000)
28
at android.os.Handler.dispatchMessage(Handler.java:108)
29
at android.os.Looper.loop(Looper.java:166)
30
at android.app.ActivityThread.main(ActivityThread.java:7529)
31
at java.lang.reflect.Method.invoke(Native Method)
32
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
33
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
为什么下载的都是V4的,请问要如何加载,还有这个控件一般还要加需求,例如像微信朋友圈查看那样,加上文字描述之类的需求
Process: com.jaagro.driver, PID: 12805
java.lang.NoSuchMethodError: com.bumptech.glide.util.LruCache.
at cc.shinichi.library.glide.cache.SafeKeyGenerator.(SafeKeyGenerator.java:17)
at cc.shinichi.library.glide.ImageLoader.getGlideCacheFile(ImageLoader.java:30)
at cc.shinichi.library.view.ImagePreviewAdapter.instantiateItem(ImagePreviewAdapter.java:276)
at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:1004)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1152)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1086)
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1616)
at android.view.View.measure(View.java:16513)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:719)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455)
at android.view.View.measure(View.java:16513)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:141)
at android.view.View.measure(View.java:16513)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
at android.view.View.measure(View.java:16513)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at android.view.View.measure(View.java:16513)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
at android.view.View.measure(View.java:16513)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2367)
at android.view.View.measure(View.java:16513)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1962)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1159)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1341)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1046)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5665)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
at android.view.Choreographer.doCallbacks(Choreographer.java:574)
at android.view.Choreographer.doFrame(Choreographer.java:544)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5135)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:798)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:614)
at dalvik.system.NativeStart.main(Native Method)
在不修改源码的情况下是否支持自定义预览页面布局结构,比如说左上角返回键,右上角功能按钮,底部增加文本显示等。
强烈建议添加个删除图片功能
代码如下:
ImagePreview.getInstance() .setContext(MainActivity.this) .setEnableDragClose(true) .setShowDownButton(false) .setIndex(position) .setImageList(fileList) .setBigImageLongClickListener(new OnBigImageLongClickListener() { @Override public boolean onLongClick(View view, final int pos) { String[] items; items = new String[] {"分享", "删除"}; AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setItems(items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { switch (i) { case 0: sharePicture(fileList.get(pos)); break; case 1: deletePicture(fileList.get(pos), pos, true); break; } } }); builder.create(); builder.show(); return false; } }) .start();
分享、删除的dialog无法正常弹出,而是被图片查看界面遮挡
https://wx2.sinaimg.cn/mw690/684ff39bly1g20z34h5ilj20kr7fekef.jpg
这个是图片链接
就是当这个图片是第一个打开的时候,他就不会显示,但是当打开其他图片再滑到这个图片他就能显示
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.