Android中ImageView显示的图片太大,想把它缩小以固定值显示,怎么办

解决方案 »

  1.   

    <ImageView android:id="@+id/mainbg" 
         android:src="@drawable/mainbg"
         android:scaleType="center"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         android:layout_centerVertical="true"/>如果要固定尺寸,假设长宽各为100px<ImageView android:id="@+id/mainbg" 
         android:src="@drawable/mainbg"
         android:scaleType="center"
         android:layout_width="100px"
         android:layout_height="100px"
         android:layout_centerVertical="true"/>
      

  2.   

    public static BitmapDrawable createNewIcon(BitmapDrawable oldIcon,
    Context context, int id) { BitmapDrawable icon = oldIcon;
    final Bitmap.Config c = icon.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
    : Bitmap.Config.RGB_565;
    int sIconWidth, sIconHeight;
    sIconWidth = sIconHeight = (int) context.getResources().getDimension(
    R.dimen.img_width); int width = sIconWidth;
    int height = sIconHeight; Bitmap bmp = BitmapFactory.decodeResource(context.getResources(), id);
    float scale = 1.0f;
    int iconWidth = icon.getIntrinsicWidth();
    int iconHeight = icon.getIntrinsicHeight(); // Log.e("12", "BitmapDrawable:iconwidth"+iconWidth);
    // Log.e("12", "BitmapDrawable:iconHeight"+iconHeight);
    // Log.e("12", "BitmapDrawable:width"+width);
    // Log.e("12", "BitmapDrawable:height"+height);
    final Canvas canvas = new Canvas();
    Rect sOldBounds = new Rect();
    if (width > 0 && height > 0) {
    // if (width < iconWidth || height < iconHeight || scale != 1.0f) { final float ratio = (float) iconWidth / iconHeight; if (iconWidth > iconHeight) {
    height = (int) (width / ratio);
    } else if (iconHeight > iconWidth) {
    width = (int) (height * ratio);
    } final Bitmap thumb = Bitmap
    .createBitmap(sIconWidth, sIconHeight, c);
    canvas.setBitmap(thumb);
    sOldBounds.set(icon.getBounds());
    final int x = (sIconWidth - width) / 2;
    final int y = (sIconHeight - height) / 2;
    icon.setBounds(x, y, x + width, y + height); canvas.drawBitmap(bmp, new Matrix(), null);
    icon.draw(canvas);
    icon.setBounds(sOldBounds);
    icon = new BitmapDrawable(context.getResources(), thumb); // } else if (iconWidth < width && iconHeight < height) {
    //
    // final Bitmap.Config c1 = Bitmap.Config.ARGB_8888;
    // final Bitmap thumb = Bitmap.createBitmap(sIconWidth, sIconHeight,
    // c1);
    // canvas.setBitmap(thumb);
    // sOldBounds.set(icon.getBounds());
    // final int x = (width - iconWidth) / 2;
    // final int y = (height - iconHeight) / 2;
    // icon.setBounds(x, y, x + iconWidth, y + iconHeight);
    // canvas.drawBitmap(bmp, new Matrix(), null);
    // icon.draw(canvas);
    // icon.setBounds(sOldBounds);
    // icon = new BitmapDrawable(context.getResources(), thumb);
    // Log.e("12",
    // "iconWidth < widthBitmapDrawable:iconwidth"+iconWidth);
    // Log.e("12", "BitmapDrawable:iconHeight"+iconHeight);
    // Log.e("12", "BitmapDrawable:width"+width);
    // Log.e("12", "BitmapDrawable:height"+height);
    // }
    }
    return icon;
    }