I have a listview with each item defined as:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:padding="10dp">
<LinearLayout android:id="@+id/llHeader"
android:background="@color/blue"
android:orientation="vertical"
android:layout_alignParentTop="true"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<CheckBox android:id="@+id/chkUse"
android:text="File-name"
android:textColor="@color/yellow"
android:textStyle="bold"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="left" />
</LinearLayout>
<ImageView android:id="@+id/ivthumbNail"
android:src="@drawable/placeholder"
android:layout_centerHorizontal="true"
android:layout_below="@+id/llHeader"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<ImageButton android:id="@+id/btnCCW"
android:src="@drawable/ccw_rotate_btn"
android:layout_alignLeft="@+id/llHeader"
android:layout_below="@+id/llHeader"
android:layout_width="48dip"
android:layout_height="48dip" />
<ImageButton android:id="@+id/btnCW"
android:src="@drawable/cw_rotate_btn"
android:layout_alignRight="@+id/llHeader"
android:layout_below="@+id/llHeader"
android:layout_width="48dip"
android:layout_height="48dip" />
</RelativeLayout>
This gives a title / checkbox, under this is an imageview with a button
either side of it. With the buttons I can rotate the image clockwise or
counter clockwise by 90 degrees, the routine that performs the rotation and
scaling of the images:
public Bitmap scaleAndRotateImage(boolean blnShow) {
try{
BitmapFactory.Options bfo = new BitmapFactory.Options();
bfo.inSampleSize = 4;
Bitmap bmpData = BitmapFactory.decodeFile(m_strFilename,
bfo);
if ( m_intOriginalWidth == 0 && m_intOriginalHeight == 0 ) {
m_intOriginalWidth = bmpData.getWidth();
m_intOriginalHeight = bmpData.getHeight();
int intScaledWidth = clsWallpaper.m_intScrWidth;
float fltAspectRatio = (float)bmpData.getHeight() /
(float)bmpData.getWidth();
int intScaledHeight = (int)((float)intScaledWidth *
fltAspectRatio);
m_fltScaleWidth = ((float)intScaledWidth) /
((float)m_intOriginalWidth);
m_fltScaleHeight = ((float)intScaledHeight) /
((float)m_intOriginalHeight);
}
// Apply the scale to the matrix
Matrix mtx = new Matrix();
mtx.postScale(m_fltScaleWidth, m_fltScaleHeight);
// Apply the rotation angle to the matrix
mtx.postRotate(m_intTotalAngle);
// Get the scaled and maybe rotated version of the bitmap
Bitmap bmpScaled = Bitmap.createBitmap(bmpData,
0, 0,
m_intOriginalWidth,
m_intOriginalHeight,
mtx, true);
if ( blnShow == true && bmpScaled != null ) {
m_drwThumbnail = new BitmapDrawable(bmpScaled);
Activity a = (Activity)m_ivThumbnail.getContext();
a.runOnUiThread(updateThumbnail);
}
return bmpScaled;
} catch( Exception ex ) {
Log.e( TAG, "rotateThumbnail", ex );
}
return null;
}
The strange this is when the image is rotated the scaled version is smaller
than it is supposed to be, if I scroll the listview so the item goes out of
view then scroll it back into view the item comes back with the image of the
correct size. Is they're anything I can do about this?
--
Regards,
Sy
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en