我是用viewpager做的滑动查看大图的功能
static class SamplePagerAdapter extends PagerAdapter {
WeakReference<PreviewImgFragment> mActivity;
PreviewImgFragment theActivity;
AlertDialog.Builder saveBuilder;
AlertDialog.Builder warningBuilder;
Bitmap bitmap;
public SamplePagerAdapter(PreviewImgFragment activity) {
mActivity = new WeakReference<>(activity);
theActivity = mActivity.get();
saveBuilder = new AlertDialog.Builder(theActivity.activity);
saveBuilder.setMessage("保存图片");
saveBuilder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
AppUtils.saveImageToGallery(bitmap);
ToastUtil.showToast("保存成功");
}
});
warningBuilder = new AlertDialog.Builder(theActivity.activity);
warningBuilder.setMessage("图片还没有准备好!");
warningBuilder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
saveBuilder.setOnDismissListener(onDismissListener);
warningBuilder.setOnDismissListener(onDismissListener);
}
private DialogInterface.OnDismissListener onDismissListener = new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
if (null != cacheView) {
cacheView.setEnabled(true);
}
}
};
@Override
protected void finalize() throws Throwable {
super.finalize();
onLongClickListener = null;
}
private View cacheView = null;
View.OnLongClickListener onLongClickListener = new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
cacheView = v;
v.setEnabled(false);
Uri uri = (Uri) v.getTag();
bitmap = AppUtils.returnBitmap(uri);
if (null != bitmap) {
Log.i("bitmap", bitmap.getHeight() + "*********" + bitmap.getWidth() + "");
saveBuilder.show();
} else {
warningBuilder.show();
}
return true;
}
};
@Override
public int getCount() {
return theActivity.list == null ? 1 : theActivity.list.size();
}
@Override
public View instantiateItem(ViewGroup container, int position) {
Log.e("instantiateItem","instantiateItem");
View convertView = View.inflate(SmartApplication.application, R.layout.loading_layout, null);
PhotoDraweeView photo = (PhotoDraweeView) convertView.findViewById(R.id.each_photo);
Uri uri = null;
if (theActivity.list != null) {
String url = AppUtils.getImg(theActivity.list.get(position) instanceof ImageInfo ? ((ImageInfo) theActivity.list.get(position)).getBigImageUrl() : (String) theActivity.list.get(position));
if (url.startsWith("http")) {
uri = Uri.parse(url);
} else {
uri = (new Uri.Builder())
.scheme("file")
.path(url)
.build();
}
} else {
if (theActivity.img.startsWith("http")) {
uri = Uri.parse(theActivity.img);
} else {
uri = (new Uri.Builder())
.scheme("file")
.path(AppUtils.getImg(theActivity.img))
.build();
}
}
GenericDraweeHierarchy hierarchy = photo.getHierarchy();
if (null == photo.getTag()) {
hierarchy.setProgressBarImage(new CustomProgressBar(photo));
} else {
// Log.e("previewLLL", photo.getTag().toString());
hierarchy = null;
}
photo.setPhotoUri(uri);
photo.setOnLongClickListener(onLongClickListener);
photo.setOnPhotoTapListener(new OnPhotoTapListener() {
@Override
public void onPhotoTap(View view, float x, float y) {
theActivity.back.callOnClick();
}
});
container.addView(convertView);
return convertView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
Log.e("destroyItem","destroyItem");
View contentView = (View) object;
container.removeView(contentView);
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
}
现在发现滑动的时候卡顿这是什么原因的大大们 ,求帮忙。谢谢!
高洛峰2017-04-18 09:16:30
큰 이미지는 압축해야 합니다. 예를 들어 이미지가 2000X2000 이상이지만 전체 휴대폰 화면이 그다지 크지 않으면 비트맵이 매우 커지므로 필요할 때만 부분적으로 로드됩니다. 확대됩니다. 또한, viewpager는 캐싱, 즉 얼마나 많은 페이지가 캐시에 로드되는지도 고려해야 합니다. viewpager에는 여러 종류의 PagerAdapter가 있으며, 적절하지 않은 경우 100페이지를 설정하면 됩니다. 한 번에 모두 로드될 수 있으며 매우 멈출 수 있습니다.
귀하의 코드에 따르면 슬라이딩할 때 웹 이미지가 로드됩니다. 여기서는 어떻게 처리하는지 모르겠습니다. 피카소나 글라이드를 사용하여 처리하는 것이 좋습니다.