Android编程实现等比例显示图片的方法
本文实例讲述了Android编程实现等比例显示图片的方法。分享给大家供大家参考,具体如下:
在android中,由于密度的影响,如果想得到图片的宽高是不行的,具体为什么我就大概说一下,具体的请搜索度娘或者古哥吧。原因是如果你把图片放在drawable-mdpi里,而手机是属于drawable-hdpi的话,图片是被自动放大,就这样取到的宽与高未必就是正确的。那么如何让android上面显示的图片是基于原来图片的比例呢,首先你可以在res目录下创建一个drawable-nodpi的目录,这个目录下的图片是不根据dpi的多少来进行拉伸或者缩小滴。然后,就是根据屏幕的宽和图片的宽高得出图片在屏幕显示的高,宽是固定的,就是屏幕的宽,所以不用算了。
privatevoidgetWidth_Height(){ Displaydisplay=getWindowManager().getDefaultDisplay(); intwidth=display.getWidth();//deprecated intheight=display.getHeight();//deprecated BitmapmBitmap=createImageWithResouce(R.drawable.history4); image.setLayoutParams(newLayoutParams(width,width/getBitmapWidth(mBitmap)*getBitmapHeight(mBitmap))); image.setImageBitmap(createImageWithResouce(R.drawable.history4)); } privateBitmapcreateImageWithResouce(intresourceID){ Bitmapbit=BitmapFactory.decodeResource(getResources(),R.drawable.history4); returnbit; } privateintgetBitmapWidth(Bitmapbitmap){ returnbitmap.getWidth(); } privateintgetBitmapHeight(Bitmapbitmap){ returnbitmap.getHeight(); } //释放bitmap privatevoidreleaseBitmap(Bitmapbitmap){ if(bitmap!=null&&!bitmap.isRecycled()){ bitmap.recycle(); bitmap=null; } }
建议使用如下的这种,应用了LruCache作为管理
publicclassImageUtil{ privateLruCache<String,Bitmap>mMemoryCache; privatefinalContextmContext; privatestaticImageUtilimageUtil; privatestaticObjectobj=newObject(); privateintmemClass; privateintcacheSize; privateImageUtil(ContextmContext){ this.mContext=mContext; createLruCache(mContext); } privatevoidcreateLruCache(ContextmContext){ memClass=((ActivityManager)mContext.getSystemService(Context.ACTIVITY_SERVICE)).getMemoryClass(); cacheSize=1024*1024*memClass/8; mMemoryCache=newLruCache<String,Bitmap>(cacheSize){ @Override protectedintsizeOf(Stringkey,Bitmapvalue){ //TODOAuto-generatedmethodstub returnvalue.getRowBytes(); } }; } publicstaticImageUtilgetInstance(ContextmContext){ if(imageUtil==null){ synchronized(obj){ if(imageUtil==null){ imageUtil=newImageUtil(mContext); } } } returnimageUtil; } publicvoidadjustImageSize(ImageViewimageView,intimageResourceId){ BitmapmBitmap=null; Displaydisplay=((MainActivity)mContext).getWindowManager().getDefaultDisplay(); intwidth=display.getWidth();//deprecated intheight=display.getHeight();//deprecated BitmapbitmapCache=mMemoryCache.get(imageResourceId+""); if(bitmapCache!=null){ mBitmap=bitmapCache; }else{ mBitmap=createImageWithResouce(mContext,imageResourceId); mMemoryCache.put(imageResourceId+"",mBitmap); } RelativeLayout.LayoutParamslayoutParams=newRelativeLayout.LayoutParams(width,width /getBitmapWidth(mBitmap)*getBitmapHeight(mBitmap)); layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); imageView.setLayoutParams(layoutParams); imageView.setBackgroundDrawable(newBitmapDrawable(mBitmap)); //imageView.setImageBitmap(mBitmap); } privatestaticBitmapcreateImageWithResouce(Contextcontext,intresourceID){ Bitmapbit=BitmapFactory.decodeResource(context.getResources(),R.drawable.ic_launcher); returnbit; } privateintgetBitmapWidth(Bitmapbitmap){ returnbitmap.getWidth(); } privateintgetBitmapHeight(Bitmapbitmap){ returnbitmap.getHeight(); } }
希望本文所述对大家Android程序设计有所帮助。