我正在申请博客。博客中的文章可能包含文本之间的图像。为了实现这一点,我使用了URLImageParser类,它扩展了ImageGetter以将Images绑定到Textview。我能够附加图像,但图像的大小是不同的。
当我在浏览器中打开图像时,我可以看到更大的图片,但在我的应用程序中,我的宽度和高度越来越小。如何根据浏览器中的图像大小调整宽度和高度。
URLImageParser类:
public class URLImageParser implements ImageGetter {
Context c;
TextView container;
int width;
public URLImageParser(TextView t, Context c) {
this.c = c;
this.container = t;
}
public Drawable getDrawable(String source) {
URLDrawable urlDrawable = new URLDrawable();
ImageGetterAsyncTask asyncTask = new ImageGetterAsyncTask(urlDrawable);
asyncTask.execute(source);
return urlDrawable;
}
public class ImageGetterAsyncTask extends AsyncTask<String, Void, Drawable> {
URLDrawable urlDrawable;
public ImageGetterAsyncTask(URLDrawable d) {
this.urlDrawable = d;
}
@Override
protected Drawable doInBackground(String... params) {
String source = params[0];
return fetchDrawable(source);
}
@Override
protected void onPostExecute(Drawable result) {
urlDrawable.setBounds(0, 0, 0+width, 0+result.getIntrinsicHeight());
urlDrawable.drawable = result;
// redraw the image by invalidating the container
URLImageParser.this.container.invalidate();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH)
{
// For ICS
URLImageParser.this.container.setHeight((URLImageParser.this.container.getHeight()
+ result.getIntrinsicHeight()));
}
else
{
// Pre ICS
URLImageParser.this.container.setEllipsize(null);
}
container.setText(container.getText());
}
public Drawable fetchDrawable(String urlString) {
try
{
InputStream is = fetch(urlString);
Drawable drawable = Drawable.createFromStream(is, "src");
drawable.setBounds(0, 0, 0 + drawable.getIntrinsicWidth(), 0 + drawable.getIntrinsicHeight());
return drawable;
} catch (Exception e) {
return null;
}
}
private InputStream fetch(String urlString) throws MalformedURLException, IOException {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet request = new HttpGet(urlString);
HttpResponse response = httpClient.execute(request);
return response.getEntity().getContent();
}
}
}
将其绑定到TextView:
URLImageParser p = new URLImageParser(tvArticle, this);
Spanned htmlSpan = Html.fromHtml(x+y, p, null);
tvArticle.setText(htmlSpan);
tvArticle.setMovementMethod(LinkMovementMethod.getInstance());
Image my app和Browser的屏幕截图:
答案 0 :(得分:0)
首先,在浏览器版本中,您需要添加&#34; w = 680&#34;到请求,这可能使服务器处理680宽度的图像。如果你从Android版本中做同样的事情,你可能会得到一个更接近你期望接收的图像。
其次,如果您希望图片在不考虑设备密度的情况下显示特定尺寸,那么您需要根据倾角尺寸(密度 - 独立像素)调整包含ImageView
的尺寸)。
您可以找到执行此操作的方法here
Resources r = getResources();
float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, sizeInDp, r.getDisplayMetrics());
然后,使用px参数,您可以相应地调整位图大小,甚至可以直接从服务器请求此大小的图像。
答案 1 :(得分:0)
您有两种选择:
第一个选项
您在WebView中显示内容,该内容将自行处理网页,您无需调整大小等。
第二个选项
您解析网页的源代码并找到页面源代码中给出的图像尺寸,并将它们转换为DP单元并将其应用于ImageView。
答案 2 :(得分:0)
您可以使用以下方法来了解网址图片的高度和宽度。
private void getDropboxIMGSize(Uri uri){
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(uri.getPath()).getAbsolutePath(), options);
int imageHeight = options.outHeight;
int imageWidth = options.outWidth;
}