类似于微博长图的显示控件?

2016-05-17 21:07:53 +08:00
 wanttofly
有没有可以现用的轮子?类似于微博,图片在 listView 中,打开时图片和屏幕等宽,可以进行缩放,滑动。 thanks
12269 次点击
所在节点    Android
27 条回复
Totato5749
2016-05-17 21:13:02 +08:00
同求。。。。。。。。。那个好像不是 listview ,好像跟 BitmapRegionDecode 有关,最近我也需要这样的轮子
wanttofly
2016-05-17 21:27:03 +08:00
@Totato5749 不是 ListView ,我的意思是图片是存在于 ListView 的 Item 中的,会有一个类似于缩略图的展示,点击然后会看到我说的效果:图片和屏幕等宽,可以进行缩放,滑动
32
2016-05-18 10:11:45 +08:00
github photoView ,没记错的话
wanttofly
2016-05-18 10:35:45 +08:00
@32 一开始就用了这个,但是这个是实现缩放的,想要与 屏幕等宽这个效果做不出来。
32
2016-05-19 10:12:16 +08:00
这个是可以更改的,我当时改了的,貌似在 PhotoView 的初始化方法里面定义了一个参数,改了源码
32
2016-05-19 10:50:37 +08:00
刚才找了一下代码,没找到...晚上如果找到了再来留言
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);
}
32
2016-05-19 13:31:06 +08:00
好像是那个 setMaximumScale
wanttofly
2016-05-19 22:05:50 +08:00
@32 thanks!昨天也在看这个东西,思路相似,不过一直在找具体的计算 sacle 的具体逻辑, setMaximumScale 是设置最大缩放比。非常感谢!
32
2016-05-19 23:55:30 +08:00
我当时是简单粗暴的解决方案,如果有更好的解决方案的话可以共享出来:-D
这代码还是翻了好久才翻出来的.
那个项目废弃快一年了都,快点谢谢本宝宝
wanttofly
2016-05-20 15:40:52 +08:00
@32 嗯嗯,还在继续搞呢。非常感谢,如果在北京请你吃饭啊。哈哈
wenmingvs
2016-05-21 05:52:13 +08:00
你好,我的开源项目实现了你说的长微博自动缩放到屏幕长宽的功能,你不妨去看看。如果看不懂,我单独把这个轮子独立出来给你用 https://github.com/wenmingvs/WeiBo
wanttofly
2016-05-21 16:51:58 +08:00
@wenmingvs 非常感谢。不过我测试了下发现
这张图片好像没有处理啊。因为它的长度超过了 4096 ,但是 android 里面是不允许高度或者宽度超过这个值的。
wanttofly
2016-05-21 16:57:30 +08:00
@wanttofly http://weibo.com/u/3229173402?from=feed&loc=nickname 这是测试微博账号,第一条微博。
wanttofly
2016-05-21 17:14:16 +08:00
@wenmingvs 哥哥哎,你这不就是用的 photoView 吗。。。改了哪儿。说下就好了。
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);
wanttofly
2016-05-21 17:40:48 +08:00
@32 哥们,现在我做的差不多,但是遇到个问题,能否不用其他的库(现在就打算用 photoView ),因为超过 4096px 的图片在 android 手机上是无法显示的,现在用 ImageLoader 可以展示出来缩略图,但是无法像其他的图片(即使是长图也可以)那样放大到屏幕等宽,只能看缩略图,然后手动放大。我在 13 楼发的图怎么样才能正常显示呢?有什么思路没?
wanttofly
2016-05-21 17:43:04 +08:00
@wenmingvs 嗯嗯,对的,刚看完你的代码,你是根据是否是长微博来手动设置的 ScaleType ,我拿到图片和屏幕尺寸进行的判断,差不多。但是我在 13 楼发的图那样,无法正常显示啊。。再看看你说的这个库。 thanks!
32
2016-05-21 22:35:34 +08:00
我依然是简单粗暴的方案,禁用硬件加速...
长图片的坑确实不太好弄,当时还想的是判断图片长宽比,再决定硬件加速的启用与否.时间充足的话可以研究一下

还有,并不是超过 4096.这个只是一个限制,如果你有一个 1*1000 的图片也同样会挂.长宽比的范围限制.并且 error 不是报在应用内的
32
2016-05-21 22:40:26 +08:00
刚才看了 @wenmingvs 的答案,确实会存在关掉硬件加速后黑屏的现象,有时候等待一会可以加载,有时候加载失败,需要重新从缩率图点击展示大图的流程走一遍.当时测试 QQ 也存在同样的问题.我的简单粗暴的解决方案,对比当时的 qq,视觉效果上是胜出的.但是性能什么的评测没有做...当时项目紧张,过了不到一个月,项目下线,又投入到新的项目了.所以这个坑一直没填...
还有,缩率图的处理最好放在服务器.等比缩放后,直接往 imageView 里面放这个缩略图应该也是崩

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/279359

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX