android textView 載入HTML 非同步載入網路圖片
阿新 • • 發佈:2019-02-20
呼叫處程式碼/** * 重寫圖片載入介面 * * @author Ruffian * @date 2016年1月15日 * */ class HtmlImageGetter implements Html.ImageGetter { /** * 獲取圖片 */ @Override public Drawable getDrawable(String source) { LevelListDrawable d = new LevelListDrawable(); Drawable empty = getResources().getDrawable( R.drawable.image_horizontal); d.addLevel(0, 0, empty); d.setBounds(0, 0, PhoneUtils.getScreenWidth(mContext), empty.getIntrinsicHeight()); new LoadImage().execute(source, d); return d; } /** * 非同步下載圖片類 * * @author Ruffian * @date 2016年1月15日 * */ class LoadImage extends AsyncTask<Object, Void, Bitmap> { private LevelListDrawable mDrawable; @Override protected Bitmap doInBackground(Object... params) { String source = (String) params[0]; mDrawable = (LevelListDrawable) params[1]; try { InputStream is = new URL(source).openStream(); return BitmapFactory.decodeStream(is); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } /** * 圖片下載完成後執行 */ @Override protected void onPostExecute(Bitmap bitmap) { if (bitmap != null) { BitmapDrawable d = new BitmapDrawable(bitmap); mDrawable.addLevel(1, 1, d); /** * 適配圖片大小 <br/> * 預設大小:bitmap.getWidth(), bitmap.getHeight()<br/> * 適配螢幕:getDrawableAdapter */ mDrawable = getDrawableAdapter(mContext, mDrawable, bitmap.getWidth(), bitmap.getHeight()); // mDrawable.setBounds(0, 0, bitmap.getWidth(), // bitmap.getHeight()); mDrawable.setLevel(1); /** * 圖片下載完成之後重新賦值textView<br/> * mtvActNewsContent:我專案中使用的textView * */ mtvActNewsContent.invalidate(); CharSequence t = mtvActNewsContent.getText(); mtvActNewsContent.setText(t); } } /** * 載入網路圖片,適配大小 * * @param context * @param drawable * @param oldWidth * @param oldHeight * @return * @author Ruffian * @date 2016年1月15日 */ public LevelListDrawable getDrawableAdapter(Context context, LevelListDrawable drawable, int oldWidth, int oldHeight) { LevelListDrawable newDrawable = drawable; long newHeight = 0;// 未知數 int newWidth = PhoneUtils.getScreenWidth(context);// 預設螢幕寬 newHeight = (newWidth * oldHeight) / oldWidth; // LogUtils.w("oldWidth:" + oldWidth + "oldHeight:" + // oldHeight); // LogUtils.w("newHeight:" + newHeight + "newWidth:" + // newWidth); newDrawable.setBounds(0, 0, newWidth, (int) newHeight); return newDrawable; } } }