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