Просмотр изображений с выровненным по правому краю, обрезанным, немасштабированным содержимым

#android #imageview #crop #alignment

#Android #просмотр изображений #обрезка #выравнивание

Вопрос:

Я часами искал, возился и плакал, но не могу понять, как поместить изображение в ImageView и представить изображение без изменения масштаба, выровненным по правому краю и обрезать переполнение за пределами левой части ImageView.

Просмотр изображений определяется как таковой:

 <ImageView
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:src="@drawable/bleh"
></ImageView>
  

layout_width установлено значение fill_parent для растягивания и сжатия изображения в соответствии с размером экрана.

layout_height имеет значение wrap_content , поскольку просмотр изображений всегда будет иметь фиксированную высоту, определяемую по изображению.

Я не определил a layout_gravity="right" потому что, насколько я понимаю, это относится к расположению ImageView внутри его родительского элемента, что в данном случае не имеет никакого эффекта, поскольку ширина ImageView установлена в fill_parent.

Используя приведенный выше код компоновки, изображение масштабируется в соответствии с ImageView. Единственный способ, которым я могу предотвратить масштабирование, — это установить android:scaleType="center" , который предотвращает масштабирование, но, к сожалению, центрирует изображение.

Есть идеи? В противном случае, в настоящее время я рассматриваю следующие альтернативы:

  • Создаю подкласс ImageView и реализую свой собственный метод onDraw().
  • Поместите ImageView размером с полноразмерное изображение в ScrollView и переместите прокрутку в крайний правый угол (и отключите любую индикацию того, что это вид прокрутки).

Ответ №1:

Вместо прокрутки — поместите изображение внутри LinearLayout или RelativeLayout. Сделайте layout_width макета параметром fill_parent, а содержимое layout_height — переносом. Затем в ImageView используйте layout gravity right и wrap_content как для ширины, так и для высоты.

 <LinerLayout android:layout_width="wrap_content" 
  android:layout_height="wrap_content">
<ImageView android:layout_gravity="right"
  android:layout_width="wrap_content" 
  android:layout_height="wrap_content"
  android:src="@drawable/bleh"/>
</LinearLayout>
  

Комментарии:

1. Спасибо!! Чрезвычайно большой лайк! 😀

Ответ №2:

@harmanjd: вы допустили небольшую ошибку, это правильный способ: (извините, я не могу прокомментировать ваш ответ)

 <LinearLayout android:layout_width="fill_parent" 
     android:layout_height="wrap_content"
     android:gravity="right">

    <ImageView 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:src="@drawable/bleh"/>
    />
</LinearLayout>
  

Комментарии:

1. Я хочу, чтобы TextView (для имени) и Imageview (для изображения) располагались в одной строке, и я хочу, чтобы TextView отображался по левому краю, а Imageview — по правому краю. не могли бы вы, пожалуйста, предложить мне способ?

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