- Google Android — это несложно
- Тень для картинки в ImageView
- Тень для картинки в ImageView
- Re: Тень для картинки в ImageView
- Re: Тень для картинки в ImageView
- Re: Тень для картинки в ImageView
- Re: Тень для картинки в ImageView
- Re: Тень для картинки в ImageView
- Re: Тень для картинки в ImageView
- Урок 4. Android Material Design. Установка теней и обрезка View
- Настройте тени и контуры
- Обрежьте view
- Как применить тень к ImageView?
- Android ImageView тень
- Пример
- Обновление
- 1 ответ
- Похожие вопросы:
- ImageView
- Общая информация
- Метод setImageResource()
- Метод setImageBitmap()
- Метод setImageDrawable()
- Метод setImageURI()
- Другие методы
- Масштабирование через свойство Scale Type
- Атрибут android:adjustViewBounds=»true»
- Загрузка изображения из галереи
- Получить размеры ImageView — будьте осторожны
- Копирование изображений между ImageView
- Примеры
Google Android — это несложно
Добро пожаловать на форум сайта
Тень для картинки в ImageView
Тень для картинки в ImageView
Сообщение sergey_korovin » 15 июл 2015, 18:39
Столкнулся с такой проблемой: есть приложение — галерея. При клике по картинке в галерее открывается новое activity, в котором расположен ImageView, масшатабирующий картинку на весь экран.
Вот layout activity:
Есть ли какой-нибудь способ нарисовать для картинки в ImageView — тень?
Можно, конечно, добавить для ImageView — android:background=»@android:drawable/dialog_holo_light_frame»,
но размер самого imageView больше, чем размер картинки, поэтому это не работает.
И размер ImageView, если я правильно понимаю, менять нельзя, так как требуется масштабирование разных по размеру картинок.
Нельзя ли как-нибудь на лету «пририсовывать» к картинке тень и уже потом устанавливать ее (setImageResource) в ImageView?
Заранее благодарю за ответы!
Re: Тень для картинки в ImageView
Сообщение Sasha2dx » 18 июл 2015, 00:02
Re: Тень для картинки в ImageView
Сообщение sergey_korovin » 18 июл 2015, 17:23
Фактически, есть два варианта:
1. Поставить для ImageView — height и width = ‘wrap_content’. Тогда тень рисуется вокруг imageView и самой картинки (их размеры совпадают) — без проблем.
Но тогда возникают проблемы с масштабированием. Маленькие картинки уже не растягиваются на весь экран.
2. Просто отказаться от тени и сделать у активити полупрозрачный затемненный фон, на котором отображается ImageView.
Вы, видимо предлагаете второй вариант.
Этот второй вариант уже используется, то есть полупрозрачный фон и так есть. Но все-равно просится еще и более темная тень под картинку. Без нее не так красиво. У ImageView можно сделать margin скажем 20dip и тень была бы видна.
Возможно есть и третий вариант — картинку открыть в Bitmap и там на лету нарисовать ей тень, а потом уже битмап подать в ImageView. С этим пока не разобрался.
Re: Тень для картинки в ImageView
Сообщение Sasha2dx » 18 июл 2015, 18:19
Нет, я говорил о первом варианте. Если я правильно понял проблему то тебе надо в атрибутах ImageView дописать/изменить следующее:
android:layout_width=»match_parent»
android:layout_height=»wrap_content»
android:adjustViewBounds=»true»
android:background=»@android:drawable/dialog_holo_light_frame»
+отступы и центрирование по желанию и самостоятельно. Так картинка будет и растягиватся в рамках допустимого и тень будет ровно под ней.
Re: Тень для картинки в ImageView
Сообщение sergey_korovin » 18 июл 2015, 19:28
Re: Тень для картинки в ImageView
Сообщение Sasha2dx » 18 июл 2015, 19:57
Ну. я же написал выше. Один параметр надо оставить match_parent, второй изменить на wrap_content. (что бы они не были одинаковыми), тогда изображение растягивается, например, по ширине вьюшки, а высота вьюшки подгоняется под контент из за параметра adjustViewBounds.
Какой параметр куда ставить — зависит от пропорций показываемых изображений и положения экрана(ландшафтный или портретный).
upd
А, и вот ещё вспомнил, у ImageView есть атрибут scaleType, можно выставить статичные размеры для вью и scaleType=»centerCrop», тогда изображение будет подгоняться к размерам вьюшки, а края которые не умещаются — будут обрезаться. Тогда размеры вью всегда будут одинаковыми, а изображение будет подгоняться.
Re: Тень для картинки в ImageView
Сообщение sergey_korovin » 18 июл 2015, 20:20
Да, я уже попробовал Спасибо за идею, работает, действительно — в зависимости от ориентации экрана меняю комбинацию match — wrap на wrap — match.
Все красиво работает, когда контейнером для ViewImage служит FrameLayout. Но в нем не получается отцентрировать картинку.
В RelativeLaout можно отцентрировать, но там почему-то не работает adjustViewBounds при landscape ориентации — остаются небольшие полосы ( в вертикальной — нормально работает).
Видимо здесь и придется использовать centerCrop.
Удалось отцентрировать картинку во FrameLayout. Дело в том, что при смене layout params сбрасывается и гравити.
Установил его динамически так: layoutParams.gravity = Gravity.CENTER;
И что интересно — простое отслеживание ориентации экрана работает одинаково для картинок с разным aspect ratio. Тое сть и длинные, и широкие картинки отображаются простой сменой комбинации match — wrap на wrap — match.
В общем, все работает. Большое спасибо за помощь!
Источник
Урок 4. Android Material Design. Установка теней и обрезка View
Перевод документации официального сайта developer.android.com
Рисунок 1. Тени для различных высот view.
Чтобы установить высоту view в макете используйте атрибут android:elevation. Чтобы установить высоту в коде activity, используйте метод View.setElevation().
Чтобы установить смещение, используйте метод View.setTranslationZ().
Новые методы ViewPropertyAnimator.z() и ViewPropertyAnimator.translationZ() позволяют легко анимировать высоту view. Для получения дополнительной информации, смотрите справку по ViewPropertyAnimator и руководство разработчика о свойствах анимации.
Вы так же можете использовать StateListAnimator чтобы установить анимации декларативно. Это особенно полезно в тех случаях, когда изменяется состояние триггера анимации, например, когда пользователь нажимает на кнопку. Для получения дополнительной информации, смотрите Изменение состояния анимации view.
Значение Z измеряется в dp (density-independent pixels).
Настройте тени и контуры
Границы фона drawable view определяют форму его тени. Контуры представляют собой внешнюю форму графического объекта и определяют область для сенсорного отклика.
Рассмотрим view, определенное с помощью фона dravable:
Фон drawable определен как прямоугольник с закругленными углами:
View отбрасывает тень с закругленными углами, после того как фон drawable установил границы view. Создание пользовательского контура переопределяет форму тени view по умолчанию.
Чтобы установить пользовательский контур для view в коде:
1. Унаследуйтесь от класса ViewOutlineProvider.
2. Переопределите метод getOutline().
3. Назначьте нового поставщика контура для вашего view с помощью метода View.setOutlineProvider() .
Вы можете создать овальные и прямоугольные очертания с закругленными углами используя методы класса Outlines. Поставщик контура для view по умолчанию получает контур из фона view. Чтобы view не отбрасывала тень, установите значение поставщика контура в null.
Обрежьте view
Обрезание позволяет вам легко изменить форму view. Вы можете обрезать view для совместимости с другими элементами дизайна или изменить форму view в ответ на действия пользователя. Вы можете обрезать view к его области контура с помощью метода View.setClipToOutline() или используя атрибут android:clipToOutline. Только прямоугольник, круг и скругленный прямоугольник поддерживают обрезание, как определено в методе Outline.canClip().
Чтобы обрезать view в форме drawable, установите drawable в качестве фона view (как показано выше), и вызовите метод View.setClipToOutline().
Обрезание view это дорогостоящая операция, поэтому не анимируйте форму, которую вы используете чтобы обрезать view. Для достижения этого эффекта используйте Reveal эффект анимации.
Источник
Как применить тень к ImageView?
Я хочу применить тень к ImageView . Когда я применяю тень к TextView , я получаю его, но он не доходит до ImageView . Как я могу решить эту проблему?
Мы также можем использовать CardView, который обеспечивает закругленный угол фона и тени. Для этого вам необходимо добавить библиотеку v7 CardView в качестве зависимости к проекту в build.gradle, как показано ниже.
Примечание. Измените 23.0.1 в приведенной выше строке с соответствующей версией.
Поэтому я окружил ImageView с помощью CardView чтобы создать тень, как CardView ниже.
Это добавит тень вокруг изображения.
Примечание: я не знаю, хороший ли это обходной путь. Я начинающий. Я попытался реализовать CardView который дает идею реализовать то же самое для этого. Если это не хорошо, пожалуйста, сообщите мне причину.
Это взято из презентации Ромена Гая в Devoxx, в формате pdf здесь.
Надеюсь, что это поможет.
ПРИМЕЧАНИЯ
Не забывайте, что Honeycomb и выше вам нужно вызвать setLayerType(LAYER_TYPE_SOFTWARE, mShadow) , иначе вы не увидите свою тень! (@Dmitriy_Boichenko)
SetShadowLayer , к сожалению, не работает с аппаратным ускорением, что значительно снижает производительность (@Matt Wear)
Ответ, взятый из Здесь
Для Api больше 21.
Вы можете попробовать в xml в imageview или Button: Читайте здесь на сайте разработчика
Создать файл shadow_rect.xml
И используйте это как android: background = “@drawable/shadow_rect в вашем представлении изображений.
Вы можете создать список слоев с возможностью рисования и поместить в него два объекта (чертежи) для изображения и тени.
Позиция теневого элемента и его содержимое могут измениться в зависимости от того, где вы хотите применить тень (верхний, левый, правый, правый и левый и т.д.) и стиль вашей тени.
Для тех, кто хочет загружать большие растровые изображения Эффективно перейдите по этой ссылке: https://developer.android.com/topic/performance/graphics/load-bitmap Это лучший и самый безопасный способ масштабирования изображения на основе устройства.
Тень для круговых изображений
Источник
Android ImageView тень
Я пытаюсь добавить тень к ImageView. Другой ответ Stackoverflow, похоже, использует холст, растровые изображения и т. д., Гораздо более сложный, чем это должно быть.
На iOS я бы сделал что-то вроде этого:
и он будет отображать падающую тень, независимо от того, применяется ли тень к виду, изображению или тексту.
Я пытался сделать то же самое на Android, но он просто отказывается работать:
Я вообще не вижу ожидаемой красной тени на моем изображении птицы.
Я делаю что-то не так?
Пример
Допустим, я хочу, чтобы тень падала вот так:
Обновление
Но если бы кто-то использовал новый API, то, согласно текущей демографии ( http://www.droid-life.com/2016/02/02/android-distribution-february-2016/), более 50% пользователей не смогут использовать приложение.
1 ответ
Я хочу применить тень на bootom ImageView, как показано на рисунке ниже. Какой-нибудь трюк, чтобы достичь этого в android ??
Я хочу применить тень к ImageView . Когда я применяю тень к TextView , я получаю ее, но она не доходит до ImageView . Как я могу решить эту проблему?
В android studio есть в сборке drawable , которую вы можете использовать для применения тени к любому View . Это похоже на тень.
Используя это, вы не можете изменить цвет фона представления & его цвет границы. Если вы хотите, чтобы ваш собственный пользовательский рисунок был нарисован, используйте layer-list
и применитесь к вашему представлению, как показано ниже
Надеюсь, это вам поможет! Спасибо Android Просмотр тени
Похожие вопросы:
Я разрабатываю простое приложение для галереи. Есть HorizontalView с миниатюрами. При нажатии на миниатюру открывается новое действие. Вот его макет:
Источник
ImageView
Общая информация
Компонент ImageView предназначен для отображения изображений. Находится в разделе Widgets.
Для загрузки изображения в XML-файле используется атрибут android:src, в последнее время чаще используется атрибут app:srcCompat.
ImageView является базовым элементом-контейнером для использования графики. Можно загружать изображения из разных источников, например, из ресурсов программы, контент-провайдеров. В классе ImageView существует несколько методов для загрузки изображений:
- setImageResource(int resId) — загружает изображение по идентификатору ресурса
- setImageBitmap(Bitmap bitmap) — загружает растровое изображение
- setImageDrawable(Drawable drawable) — загружает готовое изображение
- setImageURI(Uri uri) — загружает изображение по его URI
Метод setImageResource()
Сначала нужно получить ссылку на ImageView, а затем используется идентификатор изображения из ресурсов:
Метод setImageBitmap()
Используется класс BitmapFactory для чтения ресурса изображения в объект Bitmap, а затем в ImageView указывается полученный Bitmap. Могут быть и другие варианты.
Метод setImageDrawable()
Если у вас есть готовое изображение, например, на SD-карте, то его можно использовать в качестве объекта Drawable.
Drawable можно получить и из ресурсов, хотя такой код выглядит избыточным, если можно сразу вызвать setImageResource().
Метод setImageURI()
Берётся URI файла изображения и используется в качестве источника изображения. Этот способ годится для работы с локальными изображениями.
Загружаем Drawable через URI.
Другие методы
Также вам часто придется использовать методы, связанные с размерами и масштабированием: setMaxHeight(), setMaxWidth(), getMinimunHeight(), getMinimunWidth(), getScaleType(), setScaleType().
Масштабирование через свойство Scale Type
Для масштабирования картинки в ImageView есть свойство Scale Type и соответствующий ему атрибут android:scaleType и перечисление ImageView.ScaleType.
- CENTER
- CENTER_CROP
- CENTER_INSIDE
- FIT_CENTER
- FIT_START
- FIT_END
- FIT_XY
- MATRIX
Чтобы увидеть разницу между разными режимами, желательно использовать большую картинку, превосходящую по ширине экрана устройства. Допустим, у нас есть простенькая разметка:
Для наглядности я задал красный цвет для фона ImageView.
Режим android:scaleType=»center» выводит картинку в центре без масштабирования. Если у вас будет картинка большего размера, то края могут быть обрезаны.
Режим android:scaleType=»centerCrop» также размещает картинку в центре, но учитывает ширину или высоту контейнера. Режим попытается сделать так, чтобы ширина (или высота) картинки совпала с шириной (или высотой) контейнера, а остальное обрезается.
Режим android:scaleType=»centerInside» масштабирует картинку, сохраняя пропорции. Можно увидеть задний фон контейнера, если его размеры отличаются от размера картинки.
Режим android:scaleType=»fitCenter» (по умолчанию) похож на предыдущий, но может не сохранять пропорции.
Если выбрать режим android:scaleType=»fitStart», то картинка прижимается к левому верхнему углу и таким образом заполняет верхнюю половину контейнера.
Значение android:scaleType=»fitEnd» сместит картинку в нижнюю часть контейнера.
Режим android:scaleType=»fitXY» растягивает/сжимает картинку, чтобы подогнать её к контейнеру. Может получиться вытянутая картинка, поэтому будьте осторожны.
Последний атрибут android:scaleType=»matrix» вывел картинку без изменений в левом верхнем углу с обрезанными краями.
Атрибут android:adjustViewBounds=»true»
При использовании атрибута scaleType=»fitCenter» из предыдущего примера Android вычисляет размеры самой картинки, игнорируя размеры ImageView. В этом случае ваша разметка может «поехать». Атрибут adjustViewBounds заставляет картинку подчиниться размеру компонента-контейнера. В некоторых случаях это может не сработать, например, если у ImageView установлен атрибут layout_width=»0dip». В таком случае поместите ImageView в RelativeLayout или FrameLayout и используйте значение 0dip для этих контейнеров.
Загрузка изображения из галереи
Предположим, у вас есть на экране компонент ImageView, и вы хотите загрузить в него какое-нибудь изображение из галереи по нажатию кнопки:
Намерение ACTION_PICK вызывает отображение галереи всех изображений, хранящихся на телефоне, позволяя выбрать одно изображение. При этом возвращается адрес URI, определяющий местоположение выбранного изображения. Для его получения используется метод getData(). Далее для преобразования URI-адреса в соответствующий экземпляр класса Bitmap используется специальный метод Media.getBitmap(). И у нас появляется возможность установить изображение в ImageView при помощи setImageBitmap().
На самом деле можно поступить ещё проще и использовать метод setImageURI.
Сравните с предыдущим примером — чувствуете разницу? Тем не менее, приходится часто наблюдать подобный избыточный код во многих проектах. Это связано с тем, что метод порой кэширует адрес и не происходит изменений. Рекомендуется использовать инструкцию setImageURI(null) для сброса кэша и повторный вызов метода с нужным Uri.
В последних версиях системных эмуляторов два примера не работают. Проверяйте на реальных устройствах.
Получить размеры ImageView — будьте осторожны
У элемента ImageView есть два метода getWidth() и getHeight(), позволяющие получить его ширину и высоту. Но если вы попробуете вызвать указанные методы сразу в методе onCreate(), то они возвратят нулевые значения. Можно добавить кнопку и вызвать данные методы через нажатие, тогда будут получены правильные результаты. Либо использовать другой метод активности, который наступает позже.
Копирование изображений между ImageView
Если вам надо скопировать изображение из одного ImageView в другой, то можно получить объект Drawable через метод getDrawable() и присвоить ему второму компоненту.
Примеры
В моих статьях можно найти примеры использования ImageView.
Источник