类似于微博长图的显示控件? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wanttofly
0D

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

  •  
  •   wanttofly 2016 年 5 月 17 日 15644 次点击
    这是一个创建于 3630 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有没有可以现用的轮子?类似于微博,图片在 listView 中,打开时图片和屏幕等宽,可以进行缩放,滑动。 thanks
    27 条回复    2016-11-23 13:53:01 +08:00
    Totato5749
        1
    Totato5749  
       2016 年 5 月 17 日
    同求。。。。。。。。。那个好像不是 listview ,好像跟 BitmapRegionDecode 有关,最近我也需要这样的轮子
    wanttofly
        2
    wanttofly  
    OP
       2016 年 5 月 17 日
    @Totato5749 不是 ListView ,我的意思是图片是存在于 ListView 的 Item 中的,会有一个类似于缩略图的展示,点击然后会看到我说的效果:图片和屏幕等宽,可以进行缩放,滑动
    32
        3
    32  
    2016 年 5 月 18 日
    github photoView ,没记错的话
    wanttofly
        4
    wanttofly  
    OP
       2016 年 5 月 18 日
    @32 一开始就用了这个,但是这个是实现缩放的,想要与 屏幕等宽这个效果做不出来。
    32
        5
    32  
       2016 年 5 月 19 日   1
    这个是可以更改的,我当时改了的,貌似在 PhotoView 的初始化方法里面定义了一个参数,改了源码
    32
        6
    32  
       2016 年 5 月 19 日
    刚才找了一下代码,没找到...晚上如果找到了再来留言
    32
        7
    32  
       2016 年 5 月 19 日
    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
        8
    32  
       2016 年 5 月 19 日
    好像是那个 setMaximumScale
    wanttofly
        9
    wanttofly  
    OP
       2016 年 5 月 19 日
    @32 thanks!昨天也在看这个东西,思路相似,不过一直在找具体的计算 sacle 的具体逻辑, setMaximumScale 是设置最大缩放比。非常感谢!
    32
        10
    32  
       2016 年 5 月 19 日   1
    我当时是简单粗暴的解决方案,如果有更好的解决方案的话可以共享出来:-D
    这代码还是翻了好久才翻出来的.
    那个项目废弃快一年了都,快点谢谢本宝宝
    wanttofly
        11
    wanttofly  
    OP
       2016 年 5 月 20 日
    @32 嗯嗯,还在继续搞呢。非常感谢,如果在北京请你吃饭啊。哈哈
    wenmingvs
        12
    wenmingvs  
       2016 年 5 月 21 日 via Android   1
    你好,我的开源项目实现了你说的长微博自动缩放到屏幕长宽的功能,你不妨去看看。如果看不懂,我单独把这个轮子独立出来给你用 https://github.com/wenmingvs/WeiBo
    wanttofly
        13
    wanttofly  
    OP
       2016 年 5 月 21 日
    @wenmingvs 非常感谢。不过我测试了下发现
    这张图片好像没有处理啊。因为它的长度超过了 4096 ,但是 android 里面是不允许高度或者宽度超过这个值的。
    wanttofly
        14
    wanttofly  
    OP
       2016 年 5 月 21 日
    @wanttofly http://weibo.com/u/3229173402?from=feed&loc=nickname 这是测试微博账号,第一条微博。
    wanttofly
        15
    wanttofly  
    OP
       2016 年 5 月 21 日
    @wenmingvs 哥哥哎,你这不就是用的 photoView 吗。。。改了哪儿。说下就好了。
    wenmingvs
        16
    wenmingvs  
       2016 年 5 月 21 日
    PhotoView 对于非常大的图片,由于使用了硬件加速,当内存不足的时候会导致无法把图片转换成对应的 texture ,所以有时候一直会加载不出来,这种现象在一些低端设备中尤为明显。我正在尝试考虑使用 https://github.com/davemorrissey/subsampling-scale-image-view 替换掉 photoview 。他可以很好的支持长图,即使在低端设备上也能显示。后期会改


    自动缩放到和屏幕一样长,其实只需要设置一下 photoview 的 scaletype
    加入一下这行代码

    PhotoView.setScaleType(ImageView.ScaleType.CENTER_CROP);
    wanttofly
        17
    wanttofly  
    OP
       2016 年 5 月 21 日
    @32 哥们,现在我做的差不多,但是遇到个问题,能否不用其他的库(现在就打算用 photoView ),因为超过 4096px 的图片在 android 手机上是无法显示的,现在用 ImageLoader 可以展示出来缩略图,但是无法像其他的图片(即使是长图也可以)那样放大到屏幕等宽,只能看缩略图,然后手动放大。我在 13 楼发的图怎么样才能正常显示呢?有什么思路没?
    wanttofly
        18
    wanttofly  
    OP
       2016 年 5 月 21 日
    @wenmingvs 嗯嗯,对的,刚看完你的代码,你是根据是否是长微博来手动设置的 ScaleType ,我拿到图片和屏幕尺寸进行的判断,差不多。但是我在 13 楼发的图那样,无法正常显示啊。。再看看你说的这个库。 thanks!
    32
        19
    32  
       2016 年 5 月 21 日   1
    我依然是简单粗暴的方案,禁用硬件加速...
    长图片的坑确实不太好弄,当时还想的是判断图片长宽比,再决定硬件加速的启用与否.时间充足的话可以研究一下

    还有,并不是超过 4096.这个只是一个限制,如果你有一个 1*1000 的图片也同样会挂.长宽比的范围限制.并且 error 不是报在应用内的
    32
        20
    32  
       2016 年 5 月 21 日   1
    刚才看了 @wenmingvs 的答案,确实会存在关掉硬件加速后黑屏的现象,有时候等待一会可以加载,有时候加载失败,需要重新从缩率图点击展示大图的流程走一遍.当时测试 QQ 也存在同样的问题.我的简单粗暴的解决方案,对比当时的 qq,视觉效果上是胜出的.但是性能什么的评测没有做...当时项目紧张,过了不到一个月,项目下线,又投入到新的项目了.所以这个坑一直没填...
    还有,缩率图的处理最好放在服务器.等比缩放后,直接往 imageView 里面放这个缩略图应该也是崩
    may123
        21
    may123  
       2016 年 6 月 6 日
    请问楼主解决了,求助啊~~~
    wanttofly
        22
    wanttofly  
    OP
       2016 年 6 月 7 日
    @may123 用 photoview 不过不太理想,然后根据图的长宽来设置 scaletype.后续有再改, jiyu
    wanttofly
        23
    wanttofly  
    OP
       2016 年 6 月 7 日
    急于发版本,后边有进展会 @ 你的。话说好像有好多东西需要总结改进,哈哈。
    may123
        24
    may123  
       2016 年 6 月 7 日
    @wanttofly 我现在是用的 ScaleType.CENTER_CROP,显示的是图片中间位置,请问楼主是这样设置么?谢谢楼主~~~
    wanttofly
        25
    wanttofly  
    OP
       2016 年 6 月 7 日
    @may123 对的,长图的话就是用这个。
    wenmingvs
        26
    wenmingvs  
       2016 年 8 月 3 日   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 ,目前情况良好,即使在低端设备上也能正常显示
    wanttofly
        27
    wanttofly  
    OP
       2016 年 11 月 23 日
    @wenmingvs thanks 。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2389 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 38ms UTC 16:08 PVG 00:08 LAX 09:08 JFK 12:08
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86