Android在设备旋转后更改drawable的大小

时间:2014-01-22 12:03:51

标签: android rotation drawable

我再次需要你的帮助。

在我的活动中,我有一个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;
    } 
}

在活动开始时它很完美 - 这是从肖像开始的时候:

portrait

这是从横向开始的时候:

landscape

问题始于设备的旋转。我想,因为我没有使用像

这样的东西
android:configChanges="keyboardHidden|orientation|screenSize"

在这个活动中,我没有覆盖onConfigurationChanged(配置newConfig),应该重新加载整个活动,应该再次调用onCreate,并且应该根据新的屏幕宽度重新计算我的drawable的大小。但是,当从纵向切换到横向时,而不是得到第二张图片上的内容,我得到的是这样的东西:

enter image description here

当我检查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);

        }
    }
}

1 个答案:

答案 0 :(得分:1)

修正了它。事实证明它与drawables无关。正确的答案是:不要成为白痴。如果由于某种原因你决定成为一个像我一样的人,不要把

android:freezesText="true"
属性中的