现在很多应用都会使用到的功能,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 點贊
評論
評論
共同學習,寫下你的評論
評論加載中...
作者其他優質文章
正在加載中
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
