У вас есть два варианта здесь
<сильный>1. Эффективное использование папок Drawable Различные папки Drawable имеют связанные с ними параметры размер и плотность. Например, это вариации в соответствии с параметром размера: ldpi=240X320, mdpi=320X480, hdpi=480X800 и тому подобное. И другой параметр — плотность: mdpi: 160 dpi, hdpi: 240 dpi, xhdpi: 320 dpi.
Вам нужно будет создать изображения в PhotoShop с учетом этих параметров, а затем поместить соответствующие изображения в соответствующий вариант рисования (drawable-large-ldpi, drawable-xlarge-mdpi и т. д.). Я имею в виду, что в photoShop или каком-либо другом программном обеспечении для редактирования изображений вам нужно будет указать плотность пикселей и параметр размера для холста для рисования (как указано выше), а затем создавать изображения на этом холсте. (Надеюсь, вы понимаете, что я имею в виду :)
<сильный>2. Программное масштабирование изображений Я несколько раз сталкивался с проблемой масштабирования изображений в своих проектах, и каждый раз из-за нехватки времени (и лени) я довольствовался далеко не оптимальным решением. Но недавно я нашел время, чтобы разобраться с этим конкретным вопросом. Вот мое решение, и я надеюсь, что оно поможет и вам.
Bitmap scaleDownLargeImageWithAspectRatio(Bitmap image)
{
int imaheVerticalAspectRatio,imageHorizontalAspectRatio;
float bestFitScalingFactor=0;
float percesionValue=(float) 0.2;
//getAspect Ratio of Image
int imageHeight=(int) (Math.ceil((double) image.getHeight()/100)*100);
int imageWidth=(int) (Math.ceil((double) image.getWidth()/100)*100);
int GCD=BigInteger.valueOf(imageHeight).gcd(BigInteger.valueOf(imageWidth)).intValue();
imaheVerticalAspectRatio=imageHeight/GCD;
imageHorizontalAspectRatio=imageWidth/GCD;
Log.i("scaleDownLargeImageWIthAspectRatio","Image Dimensions(W:H): "+imageWidth+":"+imageHeight);
Log.i("scaleDownLargeImageWIthAspectRatio","Image AspectRatio(W:H): "+imageHorizontalAspectRatio+":"+imaheVerticalAspectRatio);
//getContainer Dimensions
int displayWidth = getWindowManager().getDefaultDisplay().getWidth();
int displayHeight = getWindowManager().getDefaultDisplay().getHeight();
//I wanted to show the image to fit the entire device, as a best case. So my ccontainer dimensions were displayWidth & displayHeight. For your case, you will need to fetch container dimensions at run time or you can pass static values to these two parameters
int leftMargin = 0;
int rightMargin = 0;
int topMargin = 0;
int bottomMargin = 0;
int containerWidth = displayWidth - (leftMargin + rightMargin);
int containerHeight = displayHeight - (topMargin + bottomMargin);
Log.i("scaleDownLargeImageWIthAspectRatio","Container dimensions(W:H): "+containerWidth+":"+containerHeight);
//iterate to get bestFitScaleFactor per constraints
while((imageHorizontalAspectRatio*bestFitScalingFactor <= containerWidth) &&
(imaheVerticalAspectRatio*bestFitScalingFactor<= containerHeight))
{
bestFitScalingFactor+=percesionValue;
}
//return bestFit bitmap
int bestFitHeight=(int) (imaheVerticalAspectRatio*bestFitScalingFactor);
int bestFitWidth=(int) (imageHorizontalAspectRatio*bestFitScalingFactor);
Log.i("scaleDownLargeImageWIthAspectRatio","bestFitScalingFactor: "+bestFitScalingFactor);
Log.i("scaleDownLargeImageWIthAspectRatio","bestFitOutPutDimesions(W:H): "+bestFitWidth+":"+bestFitHeight);
image=Bitmap.createScaledBitmap(image, bestFitWidth,bestFitHeight, true);
//Position the bitmap centre of the container
int leftPadding=(containerWidth-image.getWidth())/2;
int topPadding=(containerHeight-image.getHeight())/2;
Bitmap backDrop=Bitmap.createBitmap(containerWidth, containerHeight, Bitmap.Config.RGB_565);
Canvas can = new Canvas(backDrop);
can.drawBitmap(image, leftPadding, topPadding, null);
return backDrop;
}
person
Parth Kapoor
schedule
25.03.2014