现在很多应用都会使用到的功能,photoview在加载本地图片时不会出现图片位置偏移到一侧,而加载网络图片时因为有一个加载的过程导致出现问题。下面代码时viewpager中加载图片的代码:
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控件代码量非常少推荐使用。
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦