2015-02-05 4 views
1

Я использую TouchImageView (https://github.com/MikeOrtiz/TouchImageView), чтобы показать растровое изображение в полноэкранном режиме. Когда я поставил нормальные растровый:android TouchImageView высота не меняется

touchImageView.setImageBitmap(bm); 

Если пользователь двойное нажатие или 2 пальца щепотки увеличить изображение изменяет масштаб изображения, но TouchImageView ширина/высота остается тем же.

Когда я положил растровое изображение, которое больше, то экраны ширина/высота все работает, как ожидалось:

Bitmap new_bm = Bitmap.createScaledBitmap(bm, 
      more_px_then_screen_width, more_px_then_screen_height, false); 
touchImageView.setImageBitmap(bm); 

Вот XML:

<TouchImageView 
    android:id="@+id/picture_full_screen" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerInParent="true" /> 

Пожалуйста, помогите!

ответ

1

После исследования я нашел эту функцию:

/** 
* Set view dimensions based on layout params 
* 
* @param mode 
* @param size 
* @param drawableWidth 
* @return 
*/ 
private int setViewSize(int mode, int size, int drawableWidth) { 
    int viewSize; 
    switch (mode) { 
    case MeasureSpec.EXACTLY: 
     viewSize = size; 
     break; 

    case MeasureSpec.AT_MOST: 
     viewSize = Math.min(drawableWidth, size); 
     break; 

    case MeasureSpec.UNSPECIFIED: 
     viewSize = drawableWidth; 
     break; 

    default: 
     viewSize = size; 
     break; 
    } 
    return viewSize; 
} 

позже это будет пользователь в onMeasure для расчета viewWidth, viewHeight , которые используются в

setMeasuredDimension(viewWidth, viewHeight); 

Изменение setViewSize этого у меня в желаемый эффект:

/** 
* Set view dimensions based on layout params 
* 
* @param mode 
* @param size 
* @param drawableSize 
* @return 
*/ 
private int setViewSize(int mode, int size, int drawableSize) { 
    int viewSize; 
    switch (mode) { 
    case MeasureSpec.EXACTLY: 
     viewSize = (int) (size*Math.max(normalizedScale, 1.0)); 
     break; 

    case MeasureSpec.AT_MOST: 
     viewSize = (int) (size*Math.max(normalizedScale, 1.0)); 
     break; 

    case MeasureSpec.UNSPECIFIED: 
     viewSize = drawableSize; 
     break; 

    default: 
     viewSize = (int) (size*Math.max(normalizedScale, 1.0)); 
     break; 
    } 
    return viewSize; 
} 

Я изменил имя drawableWidth на drawableSize для шифрования кода, поскольку функция также используется для вычисления ширины и высоты.

Надеюсь, что кто-то посчитает это полезным.

+0

Ничего не изменилось для меня. В моем случае Ширина изображения = ширина экрана, но высота неправильная. –

Смежные вопросы