我再次需要你的帮助。
在我的活动中,我有一个TextView,我正在加载html内容:
textview.setText(Html.fromHtml(body, p, null));
由于此内容中可能有一些图片,我正在使用
URLImageParser p = new URLImageParser(textview, this);
获取它们并动态添加。问题是如果图像小于屏幕宽度,它会自动对齐左边。所以我想把图像居中,我将创建更宽的位图,并根据显示器的宽度和图像将我的图像附加到特定的位置:
public Drawable fetchDrawable(String urlString)
{
try
{
InputStream is = fetch(urlString);
Drawable drawable;
Bitmap bitmap = BitmapFactory.decodeStream(is);
widthBM=bitmap.getWidth();
heightBM=bitmap.getHeight();
display.getSize(size);
int width = size.x;
int w = (width - widthBM)/2+widthBM;
Bitmap.Config conf = Bitmap.Config.ARGB_8888;
Bitmap b = Bitmap.createBitmap(w, heightBM, conf);
Canvas comboCanvas = new Canvas(b);
comboCanvas.drawBitmap(bitmap, (width - widthBM)/2, 0, null);
drawable = new BitmapDrawable(getResources(), b);
drawable.setBounds(0, 0, 0+w, 0+heightBM);
return drawable;
}
catch (Exception e)
{
return null;
}
}
在活动开始时它很完美 - 这是从肖像开始的时候:
这是从横向开始的时候:
问题始于设备的旋转。我想,因为我没有使用像
这样的东西android:configChanges="keyboardHidden|orientation|screenSize"
在这个活动中,我没有覆盖onConfigurationChanged(配置newConfig),应该重新加载整个活动,应该再次调用onCreate,并且应该根据新的屏幕宽度重新计算我的drawable的大小。但是,当从纵向切换到横向时,而不是得到第二张图片上的内容,我得到的是这样的东西:
当我检查drawable的大小时,它是正确的(比如说纵向为295x80px,横向为455x80px,屏幕为480x800px(或横向显示时为800x480px),图像为120x80px)。我错过了什么?
public class URLImageParser implements ImageGetter
{
Context c;
TextView container;
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;
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
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 - widthBM)/2 + widthBM, 0+heightBM);
urlDrawable.drawable = result;
URLImageParser.this.container.invalidate();
URLImageParser.this.container.setHeight((URLImageParser.this.container.getHeight() + heightBM));
URLImageParser.this.container.setEllipsize(null);
}
}
}
答案 0 :(得分:1)
修正了它。事实证明它与drawables无关。正确的答案是:不要成为白痴。如果由于某种原因你决定成为一个像我一样的人,不要把
android:freezesText="true"
。