欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android编程实现等比例显示图片的方法

程序员文章站 2023-12-10 13:27:16
本文实例讲述了android编程实现等比例显示图片的方法。分享给大家供大家参考,具体如下: 在android中,由于密度的影响,如果想得到图片的宽高是不行的,具体为什么我...

本文实例讲述了android编程实现等比例显示图片的方法。分享给大家供大家参考,具体如下:

在android中,由于密度的影响,如果想得到图片的宽高是不行的,具体为什么我就大概说一下,具体的请搜索度娘或者古哥吧。 原因是如果你把图片放在drawable-mdpi里,而手机是属于drawable-hdpi的话,图片是被自动放大,就这样取到的宽与高未必就是正确的。那么如何让android上面显示的图片是基于原来图片的比例呢,首先你可以在res目录下创建一个drawable-nodpi的目录,这个目录下的图片是不根据dpi的多少来进行拉伸或者缩小滴。然后,就是根据屏幕的宽 和 图片的宽高 得出图片在屏幕显示的高,宽是固定的,就是屏幕的宽,所以不用算了。

private void getwidth_height() {
  display display = getwindowmanager().getdefaultdisplay();
  int width = display.getwidth(); // deprecated
  int height = display.getheight(); // deprecated
  bitmap mbitmap = createimagewithresouce(r.drawable.history4);
  image.setlayoutparams(new layoutparams(width, width / getbitmapwidth(mbitmap) * getbitmapheight(mbitmap)));
  image.setimagebitmap(createimagewithresouce(r.drawable.history4));
}
private bitmap createimagewithresouce(int resourceid) {
  bitmap bit = bitmapfactory.decoderesource(getresources(), r.drawable.history4);
  return bit;
}
private int getbitmapwidth(bitmap bitmap){
  return bitmap.getwidth();
}
private int getbitmapheight(bitmap bitmap){
  return bitmap.getheight();
}
// 释放bitmap
private void releasebitmap(bitmap bitmap){
  if (bitmap!=null && !bitmap.isrecycled()) {
   bitmap.recycle();
   bitmap = null;
  }
}

建议使用如下的这种,应用了lrucache作为管理

public class imageutil {
 private lrucache<string, bitmap> mmemorycache;
 private final context mcontext;
 private static imageutil imageutil;
 private static object obj = new object();
 private int memclass;
 private int cachesize;
 private imageutil(context mcontext) {
  this.mcontext = mcontext;
  createlrucache(mcontext);
 }
 private void createlrucache(context mcontext) {
  memclass = ((activitymanager) mcontext.getsystemservice(context.activity_service)).getmemoryclass();
  cachesize = 1024 * 1024 * memclass / 8;
  mmemorycache = new lrucache<string, bitmap>(cachesize) {
   @override
   protected int sizeof(string key, bitmap value) {
    // todo auto-generated method stub
    return value.getrowbytes();
   }
  };
 }
 public static imageutil getinstance(context mcontext) {
  if (imageutil == null) {
   synchronized (obj) {
    if (imageutil == null) {
     imageutil = new imageutil(mcontext);
    }
   }
  }
  return imageutil;
 }
 public void adjustimagesize(imageview imageview, int imageresourceid) {
  bitmap mbitmap = null;
  display display = ((mainactivity) mcontext).getwindowmanager().getdefaultdisplay();
  int width = display.getwidth(); // deprecated
  int height = display.getheight(); // deprecated
  bitmap bitmapcache = mmemorycache.get(imageresourceid + "");
  if (bitmapcache != null) {
   mbitmap = bitmapcache;
  } else {
   mbitmap = createimagewithresouce(mcontext, imageresourceid);
   mmemorycache.put(imageresourceid + "", mbitmap);
  }
  relativelayout.layoutparams layoutparams = new relativelayout.layoutparams(width, width
    / getbitmapwidth(mbitmap) * getbitmapheight(mbitmap));
  layoutparams.addrule(relativelayout.align_parent_bottom);
  imageview.setlayoutparams(layoutparams);
  imageview.setbackgrounddrawable(new bitmapdrawable(mbitmap));
  // imageview.setimagebitmap(mbitmap);
 }
 private static bitmap createimagewithresouce(context context, int resourceid) {
  bitmap bit = bitmapfactory.decoderesource(context.getresources(), r.drawable.ic_launcher);
  return bit;
 }
 private int getbitmapwidth(bitmap bitmap) {
  return bitmap.getwidth();
 }
 private int getbitmapheight(bitmap bitmap) {
  return bitmap.getheight();
 }
}

希望本文所述对大家android程序设计有所帮助。