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程序设计有所帮助。