package com.yaoyumeng.v2ex.utils; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.view.View; import android.widget.TextView; import com.yaoyumeng.v2ex.R; import com.yaoyumeng.v2ex.utils.Html; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; /** * Created by yw on 2015/4/25. */ public class AsyncImageGetter implements Html.ImageGetter { private Context mContext; private TextView mContainer; private Drawable mDefaultDrawable; private int mMaxWidth; public AsyncImageGetter(Context context, TextView container){ mContext = context; mContainer = container; mMaxWidth = ScreenUtils.getDisplayWidth(mContext) - ScreenUtils.dp(mContext, 100); mDefaultDrawable = context.getResources().getDrawable(R.drawable.ic_launcher); } @Override public Drawable getDrawable(String source) { final URLDrawable urlDrawable = new URLDrawable(); ImageLoader.getInstance().loadImage(source, new SimpleImageLoadingListener() { @Override public void onLoadingComplete(String s, View view, Bitmap bitmap) { if (bitmap != null) { int width; int height; if (bitmap.getWidth() > mMaxWidth) { width = mMaxWidth; height = mMaxWidth * bitmap.getHeight() / bitmap.getWidth(); } else { width = bitmap.getWidth(); height = bitmap.getHeight(); } Drawable drawable = new BitmapDrawable(mContext.getResources(), bitmap); drawable.setBounds(0, 0, width, height); urlDrawable.setBounds(0, 0, width, height); urlDrawable.mDrawable = drawable; //reset text to invalidate. mContainer.setText(mContainer.getText()); } } }); return urlDrawable; } public class URLDrawable extends BitmapDrawable{ protected Drawable mDrawable; @Override public void draw(Canvas canvas) { if(mDrawable != null){ mDrawable.draw(canvas); }else{ mDefaultDrawable.draw(canvas); } } } }