为了账号安全,请及时绑定邮箱和手机立即绑定

关于PhotoView在统一页面加载全屏图片出现图片位置偏移的问题解决

标签:
Android

现在很多应用都会使用到的功能,photoview在加载本地图片时不会出现图片位置偏移到一侧,而加载网络图片时因为有一个加载的过程导致出现问题。下面代码时viewpager中加载图片的代码:spacer.gifspacer.gif 

gv.setAdapter(new BaseAdapter() {

            @Override
            public int getCount() {return imgs.length;}
            @Override
            public Object getItem(int position) {return null;}
            @Override
            public long getItemId(int position) {return 0;}
            @Override
            public View getView(final int position, View convertView, ViewGroup parent) {
                final PhotoView p = new PhotoView(PhotoBrowse2.this);
                p.setLayoutParams(new AbsListView.LayoutParams((int) (getResources().getDisplayMetrics().density * 100), (int) (getResources().getDisplayMetrics().density * 100)));
                p.setScaleType(ImageView.ScaleType.CENTER_CROP);
                String uri="http://120.77.244.86:8000/images/"+imgs[position];
                //1.加载大家都知道的(注释掉)
		//Glide.with(PhotoBrowse2.this).load(uri).into(p);
                //2.
                Glide.with(PhotoBrowse2.this).load(uri).asBitmap().into(new SimpleTarget<Bitmap>() {
                    @Override
                    public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
                        p.setImageBitmap(resource);
                    }
                });
                // 把PhotoView当普通的控件把触摸功能关掉
                p.disenable();
                return p;
            }
        });
我们会在当前一个页面写一个隐藏的布局包含PhototView,当我们点击Viewpager时就会显示出来,点击PhotoView就会隐藏。根据出现
的问题,我第一个想到的是因为动画显示出隐藏PhototView的同时正在加载网络图片资源。那我们就应该在加载完图片后在去动画显示
PhotoView。
第一种方法是没有做处理的。
第二种方法是在into方法中使用GlideDrawableImageViewTarget方法在回调中开启隐藏
PhototView,但是因为在GridView中点击才触发的导致此方法无法正常执行。
第三种方法是添加listener()监听,在onResourceReady的回调中动态显示PhototView,效果不但没有解决反而更加严重每次都会便宜了,
第四种下面没有我就直接说了,在gv中以加载bitmap的方式设置bitmap,我们可以保存bitmap。在gv点击事件中直接设置bitmap对象就可以解决问题了。
第五种方法是先获取bitmap然后设置到photview动画显示即可解决,
gv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
        final PhotoView p = (PhotoView) view;
        mInfo = p.getInfo();
        String uri="http://120.77.244.86:8000/images/"+imgs[position];
        //1.第一种方法是
        Glide.with(PhotoBrowse2.this).load(uri).into(mPhotoView);
        mBg.startAnimation(in);
        mBg.setVisibility(View.VISIBLE);
        mParent.setVisibility(View.VISIBLE);
        mPhotoView.animaFrom(mInfo);
        //2.
        Glide.with(PhotoBrowse2.this).load(uri).into(new GlideDrawableImageViewTarget(mPhotoView){
            @Override
            public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> animation) {
                super.onResourceReady(resource, animation);
                mBg.startAnimation(in);
                mBg.setVisibility(View.VISIBLE);
                mParent.setVisibility(View.VISIBLE);
                mPhotoView.animaFrom(mInfo);
            }
        });
        //3.
        Glide.with(PhotoBrowse2.this).load(uri).listener(new RequestListener<String, GlideDrawable>() {
            @Override
            public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
                return false;
            }
            @Override
            public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
                mBg.startAnimation(in);
                mBg.setVisibility(View.VISIBLE);
                mParent.setVisibility(View.VISIBLE);
                mPhotoView.animaFrom(mInfo);
                return false;
            }
        }).into(mPhotoView);
        //5.
        Glide.with(PhotoBrowse2.this).load(uri).asBitmap().into(new SimpleTarget<Bitmap>() {
            @Override
            public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
                mPhotoView.setImageBitmap(resource);
                mBg.startAnimation(in);
                mBg.setVisibility(View.VISIBLE);
                mParent.setVisibility(View.VISIBLE);
                mPhotoView.animaFrom(mInfo);
            }
        });
    }
});[object Object][object Object][object Object][object Object][object Object]
总结:4,5两种方法可以解决,2,3两种无法解决。我使用的PhotoView控件是来自sdsadsadasdasd。地址是http://www.apkbus.com/thread-271645-1-1.html			他的PhtotView控件代码量非常少推荐使用。

5ba39fdc0001784703300601.jpg

原文链接:http://www.apkbus.com/blog-874691-63186.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消