网路图片加载方法:
1 ImageGetter中判断图片是否已经加载过,如果本地已经存在直接从本地加载
2 图片本地不存在,开启线程加载图片,下载完毕后,重新调用ImageGetter加载图片
主要代码:
1 TextView加载html
htmlText4 = (TextView) findViewById( R.id.htmlText4); Spanned span = Html.fromHtml( htmlStr,imgGetter2,null ); htmlText4.setText(span);
2 ImageGetter 使用
//加载网络图片 ImageGetter imgGetter2 = new Html.ImageGetter() { @Override public Drawable getDrawable(String source) {//参数为image的src属性 Drawable drawable = null; String photoPath = FileUtils.getPhotoImgPath(); String fileName = FileUtils.getFileName(source ); File imageFile = new File(photoPath,fileName); if(imageFile.exists()){//本地存在直接加载本地图片 //获取本地文件返回Drawable drawable=Drawable.createFromPath( imageFile.getAbsolutePath()); //设置图片边界 // drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); drawable.setBounds(0, 0, 500, 500); }else{//图片没有家再过,则重新加载图片 loadImage(source); } return drawable; } };
3 开启线程加载图片
//加载图片 private void loadImage(final String imageUrl){ new Thread(){ public void run() { Bitmap bitmap = ApiClient.getNetBitmap( imageUrl); String photoPath = FileUtils.getPhotoImgPath(); String fileName = FileUtils.getFileName(imageUrl ); try { ImageUtils.saveImageToSD(HtmlActivity.this, photoPath+"/"+fileName, bitmap, 100); } catch (IOException e) { e.printStackTrace(); } handler.sendEmptyMessage(1); }; }.start(); }
4 图片加载后,重新调用ImageGetter
//加载图片后显示html文字 private Handler handler = new Handler(){ public void handleMessage(android.os.Message msg) { Spanned span = Html.fromHtml( htmlStr,imgGetter2,null ); htmlText4.setText(span); }; };
5 图片保存到本地的路径
/** * 得到图片临时存储路径 * @return */ public static String getPhotoImgPath(){ String savePath = ""; // 判断是否挂载了SD卡 String storageState = Environment .getExternalStorageState(); if (storageState.equals(Environment.MEDIA_MOUNTED)) { savePath = Environment .getExternalStorageDirectory() + "/Test/Camera/";// 存放照片的文件夹 File savedir = new File(savePath); if (!savedir.exists()) { savedir.mkdirs(); } } return savePath; }