Java Android HTML.ImageGetter图像大小调整
我有一个文本视图,可以加载HTML内容(也有img标记)。我的问题是有些图像太大,所以应用程序崩溃。有没有办法使图像大小相同 我的代码示例:Java Android HTML.ImageGetter图像大小调整,java,android,html,android-drawable,Java,Android,Html,Android Drawable,我有一个文本视图,可以加载HTML内容(也有img标记)。我的问题是有些图像太大,所以应用程序崩溃。有没有办法使图像大小相同 我的代码示例: String EntireStire = "<b>" + mItem.title + " </b> <br> <img src='" + mItem.photo + "' > " + " <br><small>" + mItem.
String EntireStire = "<b>" + mItem.title + " </b> <br> <img src='"
+ mItem.photo + "' > " + " <br><small>" + mItem.description
+ " <br> " + mItem.content + "</small>";
noteView.setText(Html.fromHtml(EntireStire, new MyImageGetter(),
null));
noteView.setMovementMethod(LinkMovementMethod.getInstance());
}
return rootView;
}
private class MyImageGetter implements Html.ImageGetter {
@Override
public Drawable getDrawable(String arg0) {
Bitmap bitmap;
try {
bitmap = BitmapFactory.decodeStream(
(InputStream) new URL(arg0).getContent(), null, null);
@SuppressWarnings("deprecation")
Drawable drawable = new BitmapDrawable(bitmap);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),
drawable.getIntrinsicHeight());
return drawable;
} catch (Exception e) {
Drawable d = getResources().getDrawable(R.drawable.ic_launcher);
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
return d;
}
}
}
String EntireStire=”“+mItem.title+”
“+”
“+mItem.description
+“
”+mItem.content+”;
noteView.setText(Html.fromHtml(EntireStire,新的MyImageGetter(),
空);
setMovementMethod(LinkMovementMethod.getInstance());
}
返回rootView;
}
私有类MyImageGetter实现Html.ImageGetter{
@凌驾
公共可提取getDrawable(字符串arg0){
位图;
试一试{
位图=BitmapFactory.decodeStream(
(InputStream)新URL(arg0.getContent(),null,null);
@抑制警告(“弃用”)
Drawable Drawable=新的位图Drawable(位图);
drawable.setBounds(0,0,drawable.getIntrinsicWidth(),
getIntrinsicHeight());
回拉;
}捕获(例外e){
Drawable d=getResources().getDrawable(R.Drawable.ic_启动器);
d、 setBounds(0,0,d.getIntrinsicWidth(),d.getIntrinsicHeight());
返回d;
}
}
}
设置边界时使用封顶宽度/高度将确保所有图像的大小相同。在这里,我稍微修改了您的MyImageGetter方法
private class MyImageGetter implements Html.ImageGetter {
@Override
public Drawable getDrawable(String arg0) {
Bitmap bitmap;
try {
bitmap = BitmapFactory.decodeStream(
(InputStream) new URL(arg0).getContent(), null, null);
@SuppressWarnings("deprecation")
Drawable drawable = new BitmapDrawable(bitmap);
float multiplier = (float)SOME_CAPPED_WIDTH / (float)drawable.getIntrinsicWidth();
int width = (int)(drawable.getIntrinsicWidth() * multiplier);
int height = (int)(drawable.getIntrinsicHeight() * multiplier);
drawable.setBounds(0, 0, width, height);
return drawable;
} catch (Exception e) {
Drawable d = getResources().getDrawable(R.drawable.ic_launcher);
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
return d;
}
}
}
还可以使用类来支持多屏幕大小
如果要调整高度和宽度,则可以更改
Drawable d = getResources().getDrawable(R.drawable.ic_launcher);
d.setBounds(0, 0, 100, 100);
或者如果要压缩,请执行以下操作
Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
ByteArrayOutputStream out = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
drawable = new BitmapDrawable(_context.getResources(),bitmap);
使用此代码,它会调整图像的大小
private class MyImageGetter implements Html.ImageGetter {
private final Context context;
public MyImageGetter (Context context){
this.context = context;
}
@Override
public Drawable getDrawable(String source) {
int path = context.getResources().getIdentifier(source, "drawable",
BuildConfig.APPLICATION_ID);
Drawable drawable = context.getResources().getDrawable(path);
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int widthD = size.x;
int heightD = size.y;
drawable.setBounds(0, 0, widthD, (widthD* drawable.getIntrinsicHeight()/ drawable.getIntrinsicWidth()));
return drawable;
}
}
您可以这样调整位图的大小:您可以使用一些封顶宽度或高度来强制所有显示的图像大小相同。查看下面我的答案了解详细信息。不确定他是否回答过你,但只是想说这对我很有帮助,谢谢!
private class MyImageGetter implements Html.ImageGetter {
private final Context context;
public MyImageGetter (Context context){
this.context = context;
}
@Override
public Drawable getDrawable(String source) {
int path = context.getResources().getIdentifier(source, "drawable",
BuildConfig.APPLICATION_ID);
Drawable drawable = context.getResources().getDrawable(path);
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int widthD = size.x;
int heightD = size.y;
drawable.setBounds(0, 0, widthD, (widthD* drawable.getIntrinsicHeight()/ drawable.getIntrinsicWidth()));
return drawable;
}
}