Android - примерка изображения в режиме просмотра изображений - PullRequest
4 голосов
/ 28 сентября 2011

Я реализую виджет, в котором я пытаюсь отобразить большое изображение в представлении изображения (8mpx) следующим образом:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical" android:id="@+id/widget"
    android:background="#000000"
    android:padding="15dp"
    android:layout_margin="5dp"
    android:layout_gravity="top|center_vertical|center_horizontal"


    >
<LinearLayout android:background="#ffffff" android:padding="1dp" android:layout_width="wrap_content" android:layout_weight="1"
android:layout_height="wrap_content"  >
     <ImageView 
       android:adjustViewBounds="true"
       android:id="@+id/image"
       android:src="@drawable/sample"
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_weight="1" 
       android:layout_gravity="top|center_horizontal"
       android:scaleType="fitXY"
       android:maxWidth="200dip"
       android:maxHeight="300dip"
       />
</LinearLayout>

В эмуляторе все выглядит нормально, но при развертывании на устройстве я получаю сообщение «Проблема загрузки виджета».эмулятор HVGA и мое устройство имеет разрешение 480x800.Любая идея, что я делаю не так?

Спасибо!

=================================================

По совету вас, ребята, я сделал скриншот logcat.Вот оно:

enter image description here

Ответы [ 4 ]

7 голосов
/ 28 сентября 2011
imageview.setScaleType(ScaleType.CENTER_INSIDE); 
6 голосов
/ 28 сентября 2011

Попробуйте код ниже

<ImageView 
   android:adjustViewBounds="true"
   android:id="@+id/image"
   android:src="@drawable/sample"
   android:layout_width="wrap_content" 
   android:layout_height="wrap_content" 
   android:layout_gravity="top|center_horizontal"
   android:scaleType="centerInside"
   />
2 голосов
/ 29 апреля 2012

Старый пост, но вы никогда не знаете ...

Logcat показывает проблему:

«слишком большое выделение для этого процесса»

Изображение, которое вы пытаетесь отобразить, слишком велико, чтобы уместиться в память. Вам нужно уменьшить изображение, но не пытайтесь создать уменьшенную версию растрового изображения, иначе вы столкнетесь с той же проблемой. Решением является загрузка растрового изображения в память, но ТОЛЬКО для его размеров, а затем создание нового растрового изображения с размером выборки, который уменьшает общий размер изображения.

На самом деле вам даже не нужно загружать изображение, чтобы получить его оригинальный размер, но это часто имеет смысл, поэтому вы можете выбрать подходящий размер выборки.

, например

Предполагается, что ваше растровое изображение получено из InputStream:

InputStream in = ... // Your Bitmap Stream

// Decode JUST the dimensions
Options dimensionOptions = new Options();
dimensionOptions.inJustDecodeBounds = true;

BitmapFactory.decodeStream(in, null, dimensionOptions);

// Get the dimensions of the raw
int rawWidth = dimensionOptions.outWidth;

// Choose a target width for the image (screen width would make sense)
int targetWidth = 480;

// Select the sample size which best matches our target size.
// This must be an int
float sampleSize = (float)rawWidth / (float)targetWidth;

// Assume lower, which will result in a larger image
int sample = (int) FloatMath.floor(sampleSize);

// Use this to decode the original image data
Options scaleOptions = new Options();
scaleOptions.inPreferredConfig = Bitmap.Config.ARGB_8888; // 4 bytes per pixel
scaleOptions.inSampleSize = sample;

// Now create a bitmap using the sample size
Bitmap scaled = BitmapFactory.decodeStream(in, null, scaleOptions);
2 голосов
/ 28 сентября 2011

используйте это

imageview.setImageResource(your_image);
imageview.setScaleType(ScaleType.MATRIX);       
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...