2016-02-29 1 views
0

Я хочу отображать изображения и позволять щепотку масштабировать. Мое приложение - это пустое действие с линейной компоновкой с ImageView сверху и под ним горизонтальный линейный макет с некоторыми кнопками. Я попробовал оба PhotoView и TouchImageView Они оба имеют схожие проблемы:Проблемы с Android с щепоткой для увеличения библиотек PhotoView и TouchImageView на портретных изображениях

  1. меню панели инструментов справа не реагирует на прикосновения (в 4.4.4 и 4.4.2). Кажется, ответит в 5.0.2.
  2. фотографии, сделанные в портретном режиме, не отображаются или не масштабируются правильно: они используют только часть изображения.

Я посмотрел на код из TouchImageView и думаю, что я могу видеть ответ на проблемы 2: Процедуры получить ширину и высоту от кода, как:

float w = getDrawable().getIntrinsicWidth(); 

Чтобы правильно отобразить режим портрета фото в моем приложении мне нужно сделать, это

imageRotation = getOrientation(photoFilePath); 
imgView.setRotation(imageRotation); 

Это вращает фотографии для отображения, но intrinsicWidth и intrinsicHeight не меняются. Таким образом, программное обеспечение масштабирования имеет неправильные размеры. Странно, что этого раньше не было. (Возможно, это моя ошибка.) Если я прав, мне нужно изменить код, чтобы проверить свойство imgView.ROTATION.

Редактирование: я могу обнаружить поворот, а затем изменить высоту и ширину в портретном режиме изображений. Это немного помогает, но этого недостаточно. В изображении отсутствует неиспользованное пустое место. Требуется больше работы, и это выходит за рамки моих навыков.

Спасибо за любую помощь.

+0

Я использую https://github.com/davemorrissey/subsampling-scale-image-view. Попробуй! Это потрясающе, единственный недостаток в том, что вам нужно будет реализовать такие вещи, как hide Toolbar, прикоснуться к себе, но это не очень сложно. – tim687

+0

Привет. Я читал изображение из файла, получал растровое изображение, затем изменял растровое изображение и отображал его. Могу ли я использовать эту библиотеку для отображения растрового изображения? –

+0

Да, вы можете, но есть вещь, к которой я сейчас иду, с растровыми изображениями: масштабирование и перетаскивание изображения значительно медленнее при использовании растрового изображения, которое находится в памяти. Я предлагаю вам сначала сохранить отредактированное изображение, а затем отобразить его с помощью этой библиотеки. – tim687

ответ

0

Мне потребовалось некоторое время, чтобы понять это. Моя проблема заключалась в том, как я поворачивал портретные изображения, чтобы направить их на правильную ориентацию на экране. Я использовал

 imgView.setRotation((float)imageRotation); 

Это вызвало проблему! Делая это таким образом (т.е. не с помощью функции ImageView)

Matrix matrix = new Matrix(); 
    matrix.postRotate(imageRotation); 
    bmp = Bitmap.createBitmap(bmp , 0, 0, bmp .getWidth(), bmp.getHeight(), matrix, true); 

работал.

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