1
Totato5749 2016-05-17 21:13:02 +08:00
同求。。。。。。。。。那个好像不是 listview ,好像跟 BitmapRegionDecode 有关,最近我也需要这样的轮子
|
2
wanttofly OP @Totato5749 不是 ListView ,我的意思是图片是存在于 ListView 的 Item 中的,会有一个类似于缩略图的展示,点击然后会看到我说的效果:图片和屏幕等宽,可以进行缩放,滑动
|
3
32 2016-05-18 10:11:45 +08:00
github photoView ,没记错的话
|
5
32 2016-05-19 10:12:16 +08:00 1
这个是可以更改的,我当时改了的,貌似在 PhotoView 的初始化方法里面定义了一个参数,改了源码
|
6
32 2016-05-19 10:50:37 +08:00
刚才找了一下代码,没找到...晚上如果找到了再来留言
|
7
32 2016-05-19 13:30:52 +08:00
public PhotoView(Context context, AttributeSet attr, int defStyle) {
super(context, attr, defStyle); super.setScaleType(ScaleType.MATRIX); mAttacher = new PhotoViewAttacher(this); if (null != mPendingScaleType) { setScaleType(mPendingScaleType); mPendingScaleType = null; } this.setMaximumScale(23.0f); } |
8
32 2016-05-19 13:31:06 +08:00
好像是那个 setMaximumScale
|
9
wanttofly OP @32 thanks!昨天也在看这个东西,思路相似,不过一直在找具体的计算 sacle 的具体逻辑, setMaximumScale 是设置最大缩放比。非常感谢!
|
10
32 2016-05-19 23:55:30 +08:00 1
我当时是简单粗暴的解决方案,如果有更好的解决方案的话可以共享出来:-D
这代码还是翻了好久才翻出来的. 那个项目废弃快一年了都,快点谢谢本宝宝 |
12
wenmingvs 2016-05-21 05:52:13 +08:00 via Android 1
你好,我的开源项目实现了你说的长微博自动缩放到屏幕长宽的功能,你不妨去看看。如果看不懂,我单独把这个轮子独立出来给你用 https://github.com/wenmingvs/WeiBo
|
13
wanttofly OP @wenmingvs 非常感谢。不过我测试了下发现
这张图片好像没有处理啊。因为它的长度超过了 4096 ,但是 android 里面是不允许高度或者宽度超过这个值的。 |
14
wanttofly OP @wanttofly http://weibo.com/u/3229173402?from=feed&loc=nickname 这是测试微博账号,第一条微博。
|
16
wenmingvs 2016-05-21 17:37:02 +08:00
PhotoView 对于非常大的图片,由于使用了硬件加速,当内存不足的时候会导致无法把图片转换成对应的 texture ,所以有时候一直会加载不出来,这种现象在一些低端设备中尤为明显。我正在尝试考虑使用 https://github.com/davemorrissey/subsampling-scale-image-view 替换掉 photoview 。他可以很好的支持长图,即使在低端设备上也能显示。后期会改
自动缩放到和屏幕一样长,其实只需要设置一下 photoview 的 scaletype 加入一下这行代码 PhotoView.setScaleType(ImageView.ScaleType.CENTER_CROP); |
17
wanttofly OP @32 哥们,现在我做的差不多,但是遇到个问题,能否不用其他的库(现在就打算用 photoView ),因为超过 4096px 的图片在 android 手机上是无法显示的,现在用 ImageLoader 可以展示出来缩略图,但是无法像其他的图片(即使是长图也可以)那样放大到屏幕等宽,只能看缩略图,然后手动放大。我在 13 楼发的图怎么样才能正常显示呢?有什么思路没?
|
18
wanttofly OP @wenmingvs 嗯嗯,对的,刚看完你的代码,你是根据是否是长微博来手动设置的 ScaleType ,我拿到图片和屏幕尺寸进行的判断,差不多。但是我在 13 楼发的图那样,无法正常显示啊。。再看看你说的这个库。 thanks!
|
19
32 2016-05-21 22:35:34 +08:00 1
我依然是简单粗暴的方案,禁用硬件加速...
长图片的坑确实不太好弄,当时还想的是判断图片长宽比,再决定硬件加速的启用与否.时间充足的话可以研究一下 还有,并不是超过 4096.这个只是一个限制,如果你有一个 1*1000 的图片也同样会挂.长宽比的范围限制.并且 error 不是报在应用内的 |
20
32 2016-05-21 22:40:26 +08:00 1
刚才看了 @wenmingvs 的答案,确实会存在关掉硬件加速后黑屏的现象,有时候等待一会可以加载,有时候加载失败,需要重新从缩率图点击展示大图的流程走一遍.当时测试 QQ 也存在同样的问题.我的简单粗暴的解决方案,对比当时的 qq,视觉效果上是胜出的.但是性能什么的评测没有做...当时项目紧张,过了不到一个月,项目下线,又投入到新的项目了.所以这个坑一直没填...
还有,缩率图的处理最好放在服务器.等比缩放后,直接往 imageView 里面放这个缩略图应该也是崩 |
21
may123 2016-06-06 23:01:09 +08:00
请问楼主解决了,求助啊~~~
|
22
wanttofly OP @may123 用 photoview 不过不太理想,然后根据图的长宽来设置 scaletype.后续有再改, jiyu
|
23
wanttofly OP 急于发版本,后边有进展会 @ 你的。话说好像有好多东西需要总结改进,哈哈。
|
24
may123 2016-06-07 09:36:35 +08:00
@wanttofly 我现在是用的 ScaleType.CENTER_CROP,显示的是图片中间位置,请问楼主是这样设置么?谢谢楼主~~~
|
26
wenmingvs 2016-08-03 10:47:57 +08:00 1
@32
@Totato5749 @may123 @wanttofly 来填坑了,长图问题正式解决了,使用的是 https://github.com/davemorrissey/subsampling-scale-image-view 如果需要三级缓存,就这么写 ImageLoader.getInstance().loadImage(url, mOptions, new SimpleImageLoadingListener() { @Override public void onLoadingComplete(String imageUri, View view, Bitmap bitmap) { File file = DiskCacheUtils.findInCache(url, ImageLoader.getInstance().getDiskCache()); if (imageUri.endsWith(".gif")) { subsamplingScaleImageView.setVisibility(View.VISIBLE); try { GifDrawable gifDrawable = new GifDrawable(file); subsamplingScaleImageView.setImageDrawable(gifDrawable); } catch (IOException e) { e.printStackTrace(); } } } }); 这个功能已经使用在我的第三方新浪微博客户端上, https://github.com/wenmingvs/WeiBo ,目前情况良好,即使在低端设备上也能正常显示 |