ScrollView not working with Drawables Android

215 Views Asked by At

I am using Html.fromHtml() to get content and display it on my activity. To do this I am using an ImageGetter. I was having a problem that if the phone could not connect to the internet the app crashed as the pictures could not load. Instead I wanted to have a placeholder image saved in my ldpi/mdpi/...etc folders that would be inserted whenever a picture could not be loaded.

My ImageGetter uses URLImageParser which has the following onPostExecute() method:

    @Override
    protected void onPostExecute(Drawable result) {
        //check to see if an image was found (if not could
        //be due to no internet)
        if(result ==null){
            //the drawable wasn't found so use the image not found
            //png
            Drawable imageNotFound = a.getResources().getDrawable(R.drawable.image_not_found);
            result = imageNotFound;
        }

        intrinsicHeight = result.getIntrinsicHeight();
        intrinsicWidth = result.getIntrinsicWidth();

        DisplayMetrics dm = new DisplayMetrics();
        ((WindowManager) c.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(dm);
        int width = dm.widthPixels -50;
        int height = width * intrinsicHeight / intrinsicWidth;

        result.setBounds(0, 0, 0 + width, 0 
                + height);

        urlDrawable.setBounds(0, 0, 0+width, 0+height);  

        // change the reference of the current drawable to the result 
        // from the HTTP call 
        urlDrawable.drawable = result; 

        // redraw the image by invalidating the container 
        URLImageParser.this.container.invalidate();

        // For ICS
        URLImageParser.this.container.setHeight((URLImageParser.this.container.getHeight() 
        + height));

        // Pre ICS
        URLImageParser.this.container.setEllipsize(null);
    }

I have simply inserted the if(result==null) statement at the top of this method. But now if the pictures can be loaded the app works perfectly. If the images cannot be loaded and the placeholders are used instead I get some odd behavior.

The scrollview never scrolls to the bottom of the screen, and I have no idea why this is. In theory there should be no difference between my imageNotFound drawable (which is a png file) and the files downloaded off the internet. The scrollview will only move slightly.

I have no idea what is causing this. When searching online most people seem to be having problems with RelativeLayouts. I couldn't find anyone having trouble with drawables or TableLayouts.

My xml for the layout is as follows:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
  android:layout_width="match_parent"
  android:layout_height="fill_parent"
  android:paddingBottom = "0dip"
  android:orientation = "vertical" >


<TableLayout 
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:stretchColumns="0,1"
    android:shrinkColumns="0,1"
    android:id = "@+id/SharedTableLayout"
    android:paddingBottom = "0dip" >

    <TableRow
         android:layout_height="wrap_content"
         android:layout_width="match_parent"
         android:paddingBottom = "0dip">
         <TextView
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:id = "@+id/SharedTableContent"
             android:layout_span="2"
             android:gravity = "left"
             android:paddingLeft = "10dip"
             android:paddingRight = "10dip"
             android:paddingTop = "20dip"
             android:paddingBottom = "0dip"/>
    </TableRow>

</TableLayout>


</ScrollView>

I would really appreciate any suggestions on this, I've been stuck on it for weeks.

Thanks for your time

The TextView with id SharedTableContent displays a string that was converted from html using Html.fromHtml() so the images may be surrounded by text which means I cannot hard code a solution into xml as there is no way of telling how many images there will be to download in advance, thats all done programmatically.

1

There are 1 best solutions below

3
On

Try changing the layout width of the scrollview to match_parent.

android:layout_width="match_parent" android:layout_height="match_parent"

Or try this

<?xml version="1.0" encoding="utf-8"?>
<ScrollView android:id="@+id/ScrollView02" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            xmlns:android="http://schemas.android.com/apk/res/android">
<HorizontalScrollView android:id="@+id/HorizontalScrollView01" 
                      android:layout_width="wrap_content" 
                      android:layout_height="wrap_content">
<ImageView android:id="@+id/ImageView01"
           android:src="@drawable/pic" 
           android:isScrollContainer="true" 
           android:layout_height="fill_parent" 
           android:layout_width="fill_parent" 
           android:adjustViewBounds="true">
</ImageView>
</HorizontalScrollView>
</ScrollView>