package com.aiyou.viewLargeImage;
import com.aiyou.AiYouApplication;
import com.aiyou.R;
import com.aiyou.utils.NetWorkManager;
import com.aiyou.utils.SwitchManager;
import com.aiyou.viewLargeImage.GetLargeImgTask.ProgressListener;
import external.GifImageViewEx.net.frakbot.imageviewex.ImageViewEx;
import external.otherview.MagicImageView;
import external.otherview.SinkingView;
import external.smartimageview.SmartImageView;
import android.annotation.SuppressLint;
import android.graphics.Color;
import android.os.Bundle;
import android.os.AsyncTask.Status;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.Animation.AnimationListener;
import android.widget.FrameLayout;
import android.widget.Toast;
public class ViewLargeImageFragment extends Fragment implements
ProgressListener {
/**
* 获取大图的异步任务
*/
private GetLargeImgTask mTask = null;
private String mUrl;
private boolean mShowStill = true;
// sinkingview
private SinkingView mSinkView;
private SmartImageView mSmartIV;
// 查看大图
private FrameLayout mMIVFLayout;
private MagicImageView mMagicImageView;
private ImageViewEx mImageViewEx;
@SuppressLint("InflateParams")
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_view_large_image, null);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
/**
* sinkingview
*/
mSinkView = (SinkingView) view
.findViewById(R.id.activity_view_large_image_sv);
mSmartIV = (SmartImageView) view
.findViewById(R.id.activity_view_large_image_siv);
/**
* 大图
*/
mMIVFLayout = (FrameLayout) view
.findViewById(R.id.activity_view_large_image_fl_tiv);
mMagicImageView = (MagicImageView) view
.findViewById(R.id.activity_view_large_image_tiv);
mImageViewEx = (ImageViewEx) view
.findViewById(R.id.activity_view_large_image_ive);
// 设置缩放比例
mMagicImageView.setMaxScale(10f);
if (SwitchManager.getInstance(getActivity()).isNightModeEnabled()) {
mSmartIV.setColorFilter(Color.GRAY,
android.graphics.PorterDuff.Mode.MULTIPLY);
mImageViewEx.setColorFilter(Color.GRAY,
android.graphics.PorterDuff.Mode.MULTIPLY);
}
if (mShowStill) {
showStill();
} else {
showDynamic();
}
loadLargeImage();
}
@Override
public void onDestroy() {
super.onDestroy();
if (null != mTask) {
if (Status.FINISHED != mTask.getStatus()) {
mTask.cancel(true);
}
mTask = null;
}
}
public void setUrl(String url) {
mUrl = url;
}
public void showStill() {
mShowStill = true;
if (mImageViewEx != null && mMagicImageView != null) {
mImageViewEx.setVisibility(View.GONE);
mMagicImageView.setVisibility(View.VISIBLE);
if (mImageViewEx.isPlaying()) {
mImageViewEx.stop();
}
}
}
public void showDynamic() {
mShowStill = false;
if (mImageViewEx != null && mMagicImageView != null) {
mImageViewEx.setVisibility(View.VISIBLE);
mMagicImageView.setVisibility(View.GONE);
if (mImageViewEx.canPlay()) {
mImageViewEx.play();
}
}
}
public MagicImageView getStillView() {
return mMagicImageView;
}
public ImageViewEx getDynamicView() {
return mImageViewEx;
}
public SinkingView getLoadingView() {
return mSinkView;
}
public FrameLayout getLargeImageLayout() {
return mMIVFLayout;
}
public void clearAnim() {
mMIVFLayout.clearAnimation();
mSinkView.clearAnimation();
}
private void loadLargeImage() {
if (!NetWorkManager.getInstance(getActivity()).isNetAvailable()) {
Toast.makeText(getActivity(), NetWorkManager.MSG_NONET,
Toast.LENGTH_LONG).show();
return;
}
if (TextUtils.isEmpty(mUrl)) {
Toast.makeText(getActivity(), "图片地址为空", Toast.LENGTH_LONG).show();
return;
}
if (null != mTask) {
switch (mTask.getStatus()) {
case RUNNING:
mTask.cancel(true);
break;
case PENDING:
mTask.cancel(false);
break;
default:
break;
}
}
mTask = new GetLargeImgTask(getActivity(), mUrl, this);
mTask.execute();
mMagicImageView.setImageResource(R.drawable.touch_image_view);
mImageViewEx.setImageBitmap(null);
}
@Override
public void onStartProgress() {
mMIVFLayout.clearAnimation();
mMIVFLayout.setVisibility(View.GONE);
mSinkView.clearAnimation();
mSinkView.setVisibility(View.VISIBLE);
mSmartIV.setImageUrl(mUrl, R.drawable.iu_default_gray,
R.drawable.iu_default_green);
}
@Override
public void onProgress(int progress) {
float percent = progress / 100.0f;
mSinkView.setPercent(percent);
}
@Override
public void onFinishProgress(byte[] result) {
if (result == null) {
Toast.makeText(getActivity(), "下载失败", Toast.LENGTH_SHORT).show();
return;
}
mMagicImageView.setByte(result);
try {
mImageViewEx.setSource(result);
} catch (OutOfMemoryError e) {
e.printStackTrace();
}
mImageViewEx.pause();
if (mImageViewEx.getVisibility() == View.VISIBLE
&& mImageViewEx.canPlay()) {
mImageViewEx.play();
}
mMIVFLayout.setVisibility(View.VISIBLE);
Animation animIn = AnimationUtils.loadAnimation(
AiYouApplication.getInstance(), android.R.anim.fade_in);
Animation animOut = AnimationUtils.loadAnimation(
AiYouApplication.getInstance(), android.R.anim.fade_out);
mSinkView.clear();
mMIVFLayout.startAnimation(animIn);
mSinkView.startAnimation(animOut);
animOut.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationEnd(Animation arg0) {
mSinkView.setVisibility(View.GONE);
}
@Override
public void onAnimationRepeat(Animation arg0) {
}
@Override
public void onAnimationStart(Animation arg0) {
}
});
}
}