1,平时在开发中,遇到一些需要显示简介或者个人信息可能后台直接返回html。但是加载图片 会和后台上传的图片不一样
其实个人思路就是将获得的 drawble ,重新设置宽高,然后加载
本文因为我使用到了databing 和 Glide 配合使用。
<LinearLayout android:id="@+id/root_view" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/white" android:orientation="vertical"> <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="@dimen/dimen_15dp" android:lineSpacingExtra="@dimen/dimen_5dp" android:text="@{viewModel.descriptionField}" android:textColor="@{viewModel.isTextColor333?@color/color_333333:@color/color_666666}" android:textSize="16sp" /> </android.support.v4.widget.NestedScrollView> </LinearLayout>
简单的布局文件,只是个简单的TextView套Scroll;
private void setActivityContent(final String activityContent) { new Thread(new Runnable() { @Override public void run() { Html.ImageGetter imageGetter = new Html.ImageGetter() { @Override public Drawable getDrawable(String source) { //如果直接用drawble Drawable drawable; drawable = getImageNetwork(source); if (drawable != null) { int w = drawable.getMinimumWidth(); int h = drawable.getMinimumHeight(); int width = UIUtils.getScreenWidth(BaseConfig.getContext()) - UiUtil.dip2px(30); //这边主要是计算了屏幕宽度减去边距的方法 在文章底部给出 float scale = ((float) width / w); w = (int) (scale * w); h = (int) (scale * h); drawable.setBounds(0, 0, w, h); } else { return null; } return drawable; } }; CharSequence charSequence = Html.fromHtml(activityContent.trim(), imageGetter, null); Message ms = Message.obtain(); ms.what = 1; ms.obj = charSequence; mHandler.sendMessage(ms); } }).start(); } private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case 1: CharSequence charSequence = (CharSequence) msg.obj; if (charSequence != null) { descriptionField.set(charSequence); } break; default: break; } } };
/** * 连接网络获得相对应的图片 直接通过Glide * * @param imageUrl * @return */ public Drawable getImageNetwork(String imageUrl) { URL myFileUrl = null; Drawable drawable = null; try { drawable = Glide.with(AppConfig.getContext()).load(imageUrl).submit().get(); } catch (Exception e) { e.printStackTrace(); } return drawable; }
/** * 获取屏幕的宽 * * @param context * @return */ public static int getScreenWidth(Context context) { WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics dm = new DisplayMetrics(); wm.getDefaultDisplay().getRealMetrics(dm); return dm.widthPixels; }
/** * dip转换成px * * @param context * @param dpValue * @return */
public static int dip2px(float dpValue) { ensureDensity(); return (int) (dpValue * sDensity + 0.5f); }