Качество изображения в ImageView
У меня есть список растровых изображений в папке активов для отображения (с помощью ViewPager). Я попытался установить ширину и высоту изображения в зависимости от размера экрана (используя параметры макета). Но качество изображения нарушается. Как улучшить качество изображения?
Drawable drw = Drawable.createFromStream(getAssets().
open("Parts/"+drawables[i]),null);
Вот, drawables[i]
это String[]
(скажем, как ball.bmp, а "Parts" - это подпапка ресурса). Теперь я установил изображение в imageview как,
imageView.setBackgroundDrawable(imageArray[position]);
Изображение выглядит хорошо в мобильном, но выглядит растянутым на вкладке.
1 ответ
Попробуй это; расшифруйте изображение и найдите правильное значение масштаба:
private Bitmap getBitmap(String url) {
// from web
try {
Bitmap bitmap = null;
URL imageUrl = new URL(url);
HttpURLConnection conn = (HttpURLConnection) imageUrl
.openConnection();
conn.setConnectTimeout(1000);
conn.setReadTimeout(1000);
conn.setInstanceFollowRedirects(true);
InputStream is = conn.getInputStream();
OutputStream os = new FileOutputStream(f);
Utils.CopyStream(is, os);
os.close();
bitmap = decodeFile(f);
return bitmap;
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
// decodes image and scales it to reduce memory consumption
private Bitmap decodeFile(File f) {
try {
// decode image size
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(new FileInputStream(f), null, o);
// Find the correct scale value. It should be the power of 2.
final int REQUIRED_SIZE = 150;
int width_tmp = o.outWidth, height_tmp = o.outHeight;
int scale = 1;
while (true) {
if (width_tmp / 2 < REQUIRED_SIZE
|| height_tmp / 2 < REQUIRED_SIZE)
break;
width_tmp /= 2;
height_tmp /= 2;
scale *= 2;
}
// decode with inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
} catch (FileNotFoundException e) {
}
return null;
}