package com.gzsll.hupu.ui.imagepreview;
import android.graphics.drawable.Animatable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.backends.pipeline.PipelineDraweeControllerBuilder;
import com.facebook.drawee.controller.BaseControllerListener;
import com.facebook.drawee.drawable.ScalingUtils;
import com.facebook.drawee.generic.GenericDraweeHierarchy;
import com.facebook.drawee.generic.GenericDraweeHierarchyBuilder;
import com.facebook.imagepipeline.image.ImageInfo;
import com.facebook.imagepipeline.request.ImageRequest;
import com.facebook.imagepipeline.request.ImageRequestBuilder;
import com.gzsll.hupu.R;
import com.gzsll.hupu.ui.BaseFragment;
import com.gzsll.hupu.util.ResourceUtil;
import com.gzsll.hupu.widget.ImageLoadProgressBar;
import com.gzsll.hupu.widget.photodraweeview.OnViewTapListener;
import com.gzsll.hupu.widget.photodraweeview.PhotoDraweeView;
import butterknife.BindView;
import butterknife.ButterKnife;
import fr.castorflex.android.smoothprogressbar.SmoothProgressBar;
/**
* Created by sll on 2016/3/10.
*/
public class ImageFragment extends BaseFragment {
@BindView(R.id.image)
PhotoDraweeView image;
@BindView(R.id.progress)
SmoothProgressBar progress;
@BindView(R.id.rlProgress)
RelativeLayout rlProgress;
@BindView(R.id.tvInfo)
TextView tvInfo;
public static ImageFragment newInstance(String url) {
ImageFragment mFragment = new ImageFragment();
Bundle bundle = new Bundle();
bundle.putString("url", url);
mFragment.setArguments(bundle);
return mFragment;
}
private String url;
@Override
public void initInjector() {
}
@Override
public int initContentView() {
return R.layout.preview_item_layout;
}
@Override
public void getBundle(Bundle bundle) {
url = bundle.getString("url");
}
@Override
public void initUI(View view) {
ButterKnife.bind(this, view);
progress.setIndeterminate(true);
image.setOnViewTapListener(new OnViewTapListener() {
@Override
public void onViewTap(View view, float x, float y) {
getActivity().finish();
}
});
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
rlProgress.setPadding(0, ResourceUtil.getStatusBarHeight(getActivity()), 0, 0);
}
}
@Override
public void initData() {
showContent(true);
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(url))
.setProgressiveRenderingEnabled(true)
.build();
GenericDraweeHierarchy hierarchy =
new GenericDraweeHierarchyBuilder(getResources()).setProgressBarImage(
new ImageLoadProgressBar(new ImageLoadProgressBar.OnLevelChangeListener() {
@Override
public void onChange(int level) {
if (level > 100 && progress.getVisibility() == View.VISIBLE) {
progress.setVisibility(View.GONE);
}
}
}, ResourceUtil.getThemeColor(getActivity()))).build();
hierarchy.setActualImageScaleType(ScalingUtils.ScaleType.FIT_CENTER);
PipelineDraweeControllerBuilder controller = Fresco.newDraweeControllerBuilder();
controller.setControllerListener(listener);
controller.setImageRequest(request);
controller.setOldController(image.getController());
controller.setAutoPlayAnimations(true);
image.setHierarchy(hierarchy);
image.setController(controller.build());
}
private BaseControllerListener<ImageInfo> listener = new BaseControllerListener<ImageInfo>() {
@Override
public void onFailure(String id, Throwable throwable) {
super.onFailure(id, throwable);
System.out.println("onFailure:" + throwable.getMessage());
progress.setVisibility(View.GONE);
tvInfo.setVisibility(View.VISIBLE);
tvInfo.setText("图片加载失败");
}
@Override
public void onFinalImageSet(String id, ImageInfo imageInfo, Animatable animatable) {
super.onFinalImageSet(id, imageInfo, animatable);
System.out.println("onFinalImageSet");
if (imageInfo == null) {
return;
}
image.update(imageInfo.getWidth(), imageInfo.getHeight());
progress.setVisibility(View.GONE);
}
@Override
public void onSubmit(String id, Object callerContext) {
super.onSubmit(id, callerContext);
System.out.println("onSubmit");
progress.setVisibility(View.VISIBLE);
tvInfo.setVisibility(View.GONE);
}
};
}