当前位置: 移动技术网 > IT编程>移动开发>Android > Android编程实现等比例显示图片的方法

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

美上芹,华丽的外出完整版,莎拉苟萨的末日

本文实例讲述了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程序设计有所帮助。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网