Работа с одиночными изображениями 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Работа с одиночными изображениями



РАБОТА С ИЗОБРАЖЕНИЯМИ

Графические файлы

В ОС Андроид применяется растровая графика, в которой изображение представляет собой матрицу из пикселей — цветных точек. Основные характеристики растровых изображений:

- размер в пикселях, количество пикселей по ширине и по высоте (например, 800×600px) или же в виде общего количества пикселей (800×600 =480 000 пикселей, примерно 0,5 мегапикселей);

- количество используемых цветов N или глубина цвета k (зависимость между ними: );

- цветовая модель (способ задания цветов) - RGB, CMYK, XYZ, YCbCr и др.;

- разрешение изображения — величина, определяющая количество точек (элементов растрового изображения) на единицу площади (или единицу длины).

Непосредственное задание матриц изображений, bitmap-графика (как, например, в формате bmp) занимает большой объем памяти, поэтому на практике применяют сжатые файлы, в которых уменьшается объем файла за счет частичной потери содержания исходного растра.

Android поддерживает следующие форматы графических фaйлов:

1) png (Portable Network Graphics, растровый формат хранения графической информации, использующий.вместо фона прозрачный слой - формат предпочтителен),

2) jpg (jpеg, Joint Photographic Experts Group(название организации-разработчика) - формат сжатия графических файлов, позволяющий получить высокие коэффициенты сжатия - приемлем),

3) gif (Graphical Interchange Format - нежелателен),

4) webp (новый формат Google c повышенным коэффициентом сжатия, позволяющий при этом сохранить качество передачи изображений – применяется, начиная с Android 4).

Работа с одиночными изображениями

При добавлении графических файлов в папку res/drawable/ для каждого из них Android создает ресурс типа Drawable. После этого к нему можно обратиться из программного коде Java следующим образом: R.drawable.имя_файла, а в коде xml: @[имя_пакета:]drawable/имя_файла.

Пример 1. В папку res/drawable/ помещен файл picture.png. Необходимо создать кнопку и задать это изображение в качестве фона в xml-файле:

Решение.

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/button_send"

android:onClick="sendMessage"

android:background="@drawable/picture" />

Извлечь ресурс из примера 1 и управлять им в коде java тогда можно следующим образом:

Resources res = getResources();

Drawable drawable = res.getDrawable(R.drawable.picture);

Поддержка разных разрешений для одного изображения.

Отображение файла изображения на экран может зависеть от разрешения экрана - плотности условных точек на один дюйм. Для небольших экранов характерна меньшая плотность точек на дюйм, для больших - большая. При этом есть возможность создания набора нескольких вариантов изображения для разных разрешений, по нему приложение автоматически будет выбирать нужную версию изображения.

Пример 2. В каталоге rez проекта задана совокупность каталогов с общим названием mipmap и разными суффиксами:

rez

drawable

mipmap-hdpi

ic_launcher.png

mipmap-mdpi

ic_launcher.png

mipmap-xhdpi

ic_launcher.png

mipmap-xxhdpi

ic_launcher.png

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

· ldpi: для экранов с плотностью 120dpi

· mdpi: для экранов с плотностью 160dpi

· hdpi: для экранов с плотностью 240dpi

· xhdpi: для экранов с плотностью 320dpi

· xxhdpi: для экранов с плотностью 480dpi

· xxxhdpi: для экранов с плотностью 640dpi

Например, можно определить в проекте в каталоге res дополнительную папку drawable-hdpi, в которой будут располагаться изображения для экранов с плотностью 240 точек на дюйм.

Вопросы для проверки знаний.

1. Укажите основные характеристики растровых изображений.

2. Какие форматы графических фaйлов поддерживает Android?

3. В какую часть проекта добавляются графические файлы?

4. Как в ОС Андроид осуществляется поддержка разных разрешений для одного изображения?

Вопросы для проверки знаний.

1. В каком общем элементе задают набор изображений, какой элемент задает описание одного изображения?

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

10.4. Класс ImageView. Размещение изображений на экране.
Методы загрузки изображений в объекты ImageView

Класс ImageView задает значения и методы просмотра изображений в Студии. Объекты данного классаявляются базовыми контейнерами для загрузки в них изображений, которые можно брать из разных источников. Для загрузки изображения в XML-файле используется атрибут android:src. С его помощью можно задать отображаемое элементом изображение. Причем в качестве значения атрибута может выступать как файл изображения, так и ресурс drawable и даже обычный цвет.

Пример 1. XML-файл, описывающий вертикальный линейный макет, в котором размещено 3 изображения: 1) рисунок-заглавие (программное имя: image1, тип drawable, находится в файле с именем “Name”), 2) полоса (программное имя: image2,), 3) рисунок (программное имя: image3,)hbceyjrе Задание следующее.

  <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent">   <ImageView android:id="@+id/image1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/Name"/>   <ImageView android:id="@+id/image2" android:layout_width="125dip" android:layout_height="25dip" android:layout_marginTop="20dip" android:layout_marginBottom="20dip" android:src="#555555"/>   <ImageView android:id="@+id/image3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/my_draw" android:scaleType="centerInside" android:maxWidth="30dip" android:maxHeight="30dip" /> </LinearLayout>

Рассмотрим методы загрузки изображений из класса ImageView:

- setImageResource(int resId) — загрузка изображения с использованием идентификатора,

- setImageBitmap(Bitmap bitmap) — загрузка растрового изображения,

- setImageDrawable(Drawable drawable) - загрузка готового изображения,

- setImageURI(Uri uri) — загрузка изображения по его URI.

Метод setImageResource(). Сначала в хмl-описании исходного изображения надо указать его id и задать программное имя (например, draw1), а также атрибут src (например, android:src="@drawable.my_draw"), затем по программному имени получить с помощью метода findViewById ссылку на объект типа ImageView и передать его свойства в новый объект этого же типа (в примере – ImV1 ), после чего в графическое свойство данного элемента метод setImageResource переносит исходное изображение по его атрибуту android:src ( @drawable.my_draw):

ImageView ImV1 = (ImageView) findViewById(R.id. draw1);

ImV1.setImageResource(R.drawable.my_draw);

 

Метод setImageBitmap(). Используется класс BitmapFactory для чтения ресурса изображения в объект Bitmap, а затем в ImageView указывается полученный Bitmap.

 

ImageView imgView = (ImageView) findViewById(R.id.imageView1);

imgView.setImageBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.cat));

 

Метод setImageDrawable(). Если у вас есть готовое изображение, например, на SD-карте, то его можно использовать в качестве объекта Drawable.

ImageView imgView = (ImageView) findViewById(R.id.imageView1);

imgView.setImageDrawable(Drawable.createFromPath("/mnt/sdcard/cat.jpg"));

 

Метод setImageResource(). Сначала нужно получить ссылку на ImageView, а затем используется идентификатор изображения из ресурсов:

 

Метод setImageURI(). Берётся URI файла изображения и используется в качестве источника изображения. Этот способ годится для работы с локальными изображениями.

ImageView imgView = (ImageView) findViewById(R.id.imageView1);

imgView.setImageURI(URI.parse("file://mnt/sdcard/cat.jpg"));

 

Другие методы

Также вам часто придется использовать методы, связанные с размерами и масштабированием: setMaxHeight(), setMaxWidth(), getMinimunHeight(), getMinimunWidth(), getScaleType(), setScaleType().

Вопросы для проверки знаний.

1. Какие два свойства есть у простых кнопок?

2. Для чего xml-описанию кнопки задается дополнительное свойство android:id?

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

4. Какие три метода можно использовать для разработки программного кода функции-обработчика?

5. Для чего в файле activity.main.xml для кнопок задается свойство android:onClick?

6. Какие действия описываются в теле функции-обработчика?

7. Как можно упростить обработку нажатий на кнопки при большом их числе?

 

 

Узнать размеры экрана

Для вычисления размеров экрана можно воспользоваться двумя способами. Второй способ более правильный.

TextView tvResult = (TextView)findViewById(R.id.textView1); // Узнаем размеры экрана из ресурсовDisplayMetrics displaymetrics = getResources().getDisplayMetrics(); // узнаем размеры экрана из класса DisplayDisplay display = getWindowManager().getDefaultDisplay();DisplayMetrics metricsB = new DisplayMetrics();display.getMetrics(metricsB); tvResult.setText("[Используя ресурсы] \n" + "Ширина: " + displaymetrics.widthPixels + "\n" + "Высота: " + displaymetrics.heightPixels + "\n" + "\n" + "[Используя Display] \n" + "Ширина: " + metricsB.widthPixels + "\n" + "Высота: " + metricsB.heightPixels + "\n");

Ресурсы типа Drawable ]

Рисуемые (drawable) ресурсы составляют главную концепцию для графики, которая может быть отрисована на экране, и которую можно запросить через такое API как getDrawable(int), или применить к другому XML-ресурсу Android Studio Tips and Tricks

IN THIS DOCUMENT

1. Productivity Features

2. Working with IntelliJ

3. Key Commands

SEE ALSO

1. Download Android Studio

2. IntelliJ IDEA Android Tutorials

3. IntelliJ FAQ on migrating to IntelliJ IDEA

If you're unfamiliar with using Android Studio and the IntelliJ IDEA interface, this page provides some tips to help you get started with some of the most common tasks and productivity enhancements.

Productivity Features

Android Studio includes a number of features to help you be more productive in your coding. This section notes a few of the key features to help you work quickly and efficiently.

Smart Rendering

With smart rendering, Android Studio displays links for quick fixes to rendering errors. For example, if you add a button to the layout without specifying the width and height atttributes, Android Studio displays the rendering message Automatically add all missing attributs. Clicking the message adds the missing attributes to the layout.

Bitmap rendering in the debugger

While debugging, you can now right-click on bitmap variables in your app and invoke View Bitmap. This fetches the associated data from the debugged process and renders the bitmap in the debugger.

Figure 1. Bitmap Rendering

Output window message filtering

When checking build results, you can filter messages by message type to quickly locate messages of interest.

с помощью атрибутов наподобие android:drawable и android:icon. Есть несколько разных типов drawable-ресурсов.

Bitmap File - растровая картинка, графический файл с расширением.png,.jpg или.gif. Создается с помощью классаBitmapDrawable.

Подробнее о ресурсе файла Bitmap

 

 

   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   

 

 

Nine-Patch File - это файл PNG с растягиваемыми регионами, чтобы можно было изменить размеры изображения, базируясь на его содержимом (.9.png). Создается с помощью класса NinePatchDrawable.

Подробнее о ресурсе Nine-Patch

 

Layer List - список слоев, специальный drawable-ресурс, который управляет массивом из других drawable-ресурсов. Этот список отрисовывается в порядке следования элементов в массиве, так что элемент с самым большим индексом будет нарисован на самом верху. Создается с помощью класса LayerDrawable.

 

Bitmap-файлом (растровой картинкой) считаются файлы с расширением.png,.jpg или.gif. Android создает Drawable-ресурс для любого такого файла который Вы разместите в папке res/drawable/, при этом имена файлов без расширения образуют идентификатор ресурса (resource ID).

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

Для обращения к ресурсу может использоваться компилируемый класс BitmapDrawable. На языке Java доступ к ресурсу осуществляется с помощью R.drawable.filename, в XML обращение к ресурсу происходит через @[package:]drawable/filename.

Например, картинка сохранена в файл res/drawable/myimage.png, и этот layout XML применит картинку к View:

< ImageView

android:layout_height="wrap_content"

android:layout_width="wrap_content"

android:src="@drawable/myimage" />

Следующий код получит картинку как объект Drawable:

Resources res = getResources();

Drawable drawable = res.getDrawable(R.drawable.myimage);

См. также:

• 2D Graphics site:developer.android.com.
• BitmapDrawable site:developer.android.com.

[ XML Bitmap ]

XML bitmap является ресурсом, заданным в XML, который указывает на файл bitmap. В результате появляется алиас (псевдоним) для сырого файла растровой картинки (raw bitmap file). XML может указать дополнительные свойства для картинки, такие как создание иллюзии увеличения глубины цвета (dithering) и мозаика (tiling).

Примечание: Вы можете использовать элемент < bitmap > как дочерний в элементе < item >. Например, когда создается список состояний (state list) или список слоев (layer list), Вы можете исключить атрибут android:drawable из элемента < item > и встроить внутрь него < bitmap >, который определит рисуемый объект.

XML bitmap размещается в файле res/drawable/filename.xml, при этом имя файла без расширения дает идентификатор ресурса (resource ID). Компилируемый тип данных для ресурса BitmapDrawable. К ресурсу происходит обращение на Java через R.drawable.filename, в XML через @[package:]drawable/filename.

Синтаксис:

<?xml version="1.0" encoding="utf-8"? >

< bitmap

xmlns:android="http://schemas.android.com/apk/res/android"

android:src="@[package:]drawable/drawable_resource"

android:antialias=["true" | "false"]

android:dither=["true" | "false"]

android:filter=["true" | "false"]

android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
"fill_vertical" | "center_horizontal" | "fill_horizontal" |
"center" | "fill" | "clip_vertical" | "clip_horizontal"]

android:mipMap=["true" | "false"]

android:tileMode=["disabled" | "clamp" | "repeat" | "mirror"] />

Описание элементов

< bitmap > задает источник для картинки и её свойства. Атрибуты:

xmlns:android строка. Задает пространство имен XML, которое должно быть "http://schemas.android.com/apk/res/android";. Это требуется только если < bitmap > является корневым элементом, и не требуется, когда < bitmap > встроен внутри < item >.

android:src рисуемый ресурс, обязательный элемент. Дает ссылку на drawable resource.

android:antialias Boolean. Разрешает или запрещает антиалиазинг.

android:dither Boolean. Разрешает или запрещает dithering картинки, если картинка не имеет ту же конфигурацию пикселей, что и экран (например ARGB 8888 bitmap, которая должна быть отображена на экране RGB 565).

android:filter Boolean. Разрешает или запрещает фильтрацию картинки. Фильтрация используется, когда картинка сжимается или расширяется, чтобы улучшить её внешний вид.

android:gravity ключевое слово. Задает гравитацию для картинки. Гравитация показывает, где расположить картинку в её контейнере, если картинка меньше, чем контейнер. Здесь может быть указано одно или большее количество (разделенных операцией ИЛИ '|') следующих констант:

Значение Описание
top Помещает объект в верхнюю часть контейнера, без изменения его размера.
bottom То же самое, но по нижнему срезу контейнера.
left То же самое, но по левому срезу.
right То же самое, но по правому срезу.
center_vertical Размещает объект по вертикальному центру контейнера, без изменения его размеров.
fill_vertical Увеличивает вертикальный размер объекта, если это нужно для полного заполнения контейнера.
center_horizontal Размещает объект по горизонтальному центру контейнера, без изменения его размеров.
fill_horizontal Увеличивает горизонтальный размер объекта, если это нужно для полного заполнения контейнера.
center Размещает объект в центре контейнера и по вертикали и по горизонтали, без изменения его размера.
fill Увеличивает объект по горизонтали и вертикали, если это нужно для полного заполнения контейнера. Это поведение по умолчанию.
clip_vertical Дополнительная опция, которая может быть установлена, чтобы верхняя и/или нижняя части дочернего объекта были обрезаны границами контейнера. Обрезка базируется на вертикальной gravity: top gravity обрезает объект снизу, bottom gravity обрезает сверху, и если гравитации по вертикали нет, то обрезаются оба края, и верхний и нижний.
clip_horizontal Дополнительная опция, которая может быть установлена, чтобы левая и/или правая части дочернего объекта были обрезаны границами контейнера. Обрезка базируется на горизонтальной gravity: left gravity обрезает объект справа, right gravity обрезает слева, и если гравитации по горизонтали нет, то обрезаются оба края, и верхний и нижний.

 

ImageView

Общая информация
Масштабирование через свойство Scale Type
Загрузка изображения из галереи
Получить размеры ImageView - будьте осторожны
Программное изменение размеров ImageView
Копирование изображений между ImageView
Примеры

Общая информация

Для загрузки изображения в XML-файле используется атрибут android:src.

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

· setImageResource(int resId) — загружает изображение по идентификатору ресурса

· setImageBitmap(Bitmap bitmap) — загружает растровое изображение

· setImageDrawable(Drawable drawable) - загружает готовое изображение

· setImageURI(Uri uri) — загружает изображение по его URI

Метод setImageResource()

Сначала нужно получить ссылку на ImageView, а затем используется идентификатор изображения из ресурсов:

 

ImageView imgView = (ImageView) findViewById(R.id.imageView1);

imgView.setImageResource(R.drawable.cat);

Метод setImageBitmap()

Используется класс BitmapFactory для чтения ресурса изображения в объект Bitmap, а затем в ImageView указывается полученный Bitmap.

 

ImageView imgView = (ImageView) findViewById(R.id.imageView1);

imgView.setImageBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.cat));

Метод setImageDrawable()

Если у вас есть готовое изображение, например, на SD-карте, то его можно использовать в качестве объекта Drawable.

 

ImageView imgView = (ImageView) findViewById(R.id.imageView1);

imgView.setImageDrawable(Drawable.createFromPath("/mnt/sdcard/cat.jpg"));

Метод setImageURI()

Берётся URI файла изображения и используется в качестве источника изображения. Этот способ годится для работы с локальными изображениями.

 

ImageView imgView = (ImageView) findViewById(R.id.imageView1);

imgView.setImageURI(URI.parse("file://mnt/sdcard/cat.jpg"));

Другие методы

Также вам часто придется использовать методы, связанные с размерами и масштабированием: setMaxHeight(), setMaxWidth(), getMinimunHeight(), getMinimunWidth(), getScaleType(), setScaleType().

Примеры

В моих статьях можно найти примеры использования ImageView.

Toast - всплывающие сообщения (Программное создание ImageView и через разметку).

Загрузка картинок с плавными переходами

Загрузка изображения с карточки в ImageView

Сохранение картинки из ImageView на SD-карту

Вращение

Анимация пульсации ImageView

Анимация вращения через XML

Продвинутые приёмы работы с ImageView (Закрытая зона/4-й месяц)

Библиотеки

CustomShapeImageView - позволяет создавать рамки разных форм.

MikeOrtiz/TouchImageView - расширенный вариант ImageView, который поддерживает касания экрана и масштабирование.

Реклама


 

Shape и ShapeDrawable

Фигуры являются подмножеством Drawable-ресурсов.

Данный вид ресурсов на основе класса ShapeDrawable позволяет описывать простые геометрические фигуры, указывая их размеры, фон и контур с помощью тега <shape>.

Можно создавать ресурсы фигур на основе стандартных фигур вроде прямоугольника, эллипса, линии. Для использования ресурсов фигур нужно создать в подкаталоге res/drawable XML-файл, в котором будет присутствовать тег <shape>, который в свою очередь может содержать дочерние элементы <corners>, <gradient>, <padding>, <size>, <solid>, <stroke>.

Имя файла без расширения будет служить идентификатором (ID): R.drawable.filename в Java-коде и @[package:]drawable/filename в XML-файлах.

Элементы фигуры

<shape>

Фигура. Является корневым элементом в XML.
Атрибуты:

· xmlns:android - обязательный атрибут со строкой "http://schemas.android.com/apk/res/android"

· android:shape - задаёт тип фигуры: rectangle (прямоугольник, заполняющий элемент, является фигурой по умолчанию), oval (овал), line (линия, требуется также наличие элемента <stroke> для задания ширины линии), ring (окружность, для данной фигуры можно использовать атрибуты android:innerRadius, android:innerRadiusRatio, android:thickness, android:thicknessRatio, android:useLevel)

· <corners> - создаёт закругленные углы для фигуры. Только для прямоугольника. Возможные атрибуты: android:radius, android:topLeftRadius, android:topRightRadius, android:bottomLeftRadius, android:bottomRightRadius

· <gradient> - задаёт градиентную заливку для фигуры. Возможные атрибуты: android:angle, android:centerX, android:centerY, android:centerColor, android:endColor, android:gradientRadius, android:startColor, android:type, android:useLevel

· <padding> - отступы. Возможные атрибуты: android:left, android:top, android:right, android:bottom

· <size> - размеры фигуры. Возможные атрибуты: android:height, android:width

· <solid> - сплошной цвет для фигуры. Возможные атрибуты: android:color

· <stroke> - контур фигуры. Возможные атрибуты: android:width, android:color, android:dashGap (расстояние между черточками), android:dashWidth (длина пунктирной черточки)

Rectangle (Прямоугольник)

shape_rect.xml - Атрибут android:shape здесь необязателен: rectangle — это значение по умолчанию.

<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <solid android:color="#0377BE"/> </shape> </item></selector>

Пример с градиентным прямоугольником в качестве разделителя

Создадим файл separator.xml:

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <gradient android:angle="0" android:centerColor="#47CF4F" android:endColor="#000000" android:startColor="#000000" /> </shape>

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

<TextView android:id="@+id/tvSource" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" /> <View android:layout_width="wrap_content" android:background="@drawable/separator" android:layout_height="1dp" /> <TextView android:id="@+id/tvResult" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" /> <View android:layout_width="wrap_content" android:background="@drawable/separator" android:layout_height="3dp" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" />

У первого разделителя ширина 1dp, у второго - 3dp. Получили красивую полоску.

У прямоугольников можно скруглить углы при помощи тега corners

rectangle_rounded_all.xml

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape> <solid android:color="#B902B0"/> <corners android:radius="10.0dip" /> </shape> </item></selector>

Можно закруглить углы по отдельности:

rectangle_rounded_some.xml

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape> <solid android:color="#EC6118"/> <corners android:bottomRightRadius="0.1dp" android:bottomLeftRadius="7dip" android:topLeftRadius="7dip" android:topRightRadius="0.1dp"/> </shape> </item></selector>

Oval (Эллипс)

shape_oval.xml

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="oval"> <solid android:color="#FCD366"/> </shape> </item></selector>

Другой вариант с пунктиром:

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > <gradient android:centerColor="#FFFF00" android:centerX="0.5" android:centerY="0.5" android:endColor="#00FF00" android:gradientRadius="100" android:startColor="#FF0000" android:type="radial" /> <stroke android:dashGap="6dip" android:dashWidth="8dip" android:width="5dip" android:color="#000000" /> </shape>

Ring (Кольцо)

shape_ring.xml - Для кольца имеются дополнительные атрибуты:

InnerRadius

Внутренний радиус

InnerRadiusRatio

Отношение между внешним и внутренним радиусами. По умолчанию равно 3

Thickness

Толщина кольца (т.е. разница между внешним и внутренним радиусами)

ThicknessRatio

Отношение ширины кольца к его толщине. По умолчанию равно 9

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="ring" android:innerRadiusRatio="3" android:thicknessRatio="5.333"> <solid android:color="#7DBE15"/> </shape> </item></selector>

Line (Горизонтальная линия)

shape_line.xml - Линия может быть только горизонтальной

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="line"> <stroke android:width="1dip" android:color="#F20107" /> </shape> </item></selector>

Linear

gradient_linear.xml

· android:type="linear" можно опустить, он так и есть по умолчанию. Отображает прямой переход от цвета startColor к цвету endColor под углом, заданным в атрибуте angle.

· Атрибут android:angle используется только линейным градиентом и должен быть кратным значению 45.

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape> <gradient android:type="linear" android:endColor="#3C0000" android:startColor="#FF0202" android:angle="45.0" /> <corners android:radius="10.0dip" /> </shape> </item></selector>

Radial

· android:gradientRadius является обязательным для радиального градиента, а у остальных игнорируется. Рисует круговой градиент, начиная с цвета startColor и заканчивая startColor, от внешнего края фигуры до ее центра. Требует атрибут gradientRadius, который указывает радиус градиентного перехода в пикселях. Поддерживаются также необязательные атрибуты centerX и centerY, описывающие сдвиг центральной точки градиента. Поскольку радиус градиента указывается в пикселах, он не будет автоматически масштабироваться при разной плотности точек на экране. Чтобы минимизировать эффект ступенчатости, необходимо указывать разные значения радиуса для дисплеев с разным разрешением.

· Имеются также атрибуты android:centerX и android:centerY, в которых можно задавать относительное (0.0 – 1.0) расположение центра градиента.

gradient_radial.xml

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape> <gradient android:type="radial" android:endColor="#3C0000" android:startColor="#FF0202" android:gradientRadius="50"/> <corners android:radius="10.0dip" /> </shape> </item></selector>

Sweep

Рисует развёрточный градиент с помощью перехода между цветами startColor и endColor вдоль внешнего края фигуры (как правило, кольца).

Можно использовать атрибуты android:centerX и android:centerY.

gradient_sweep.xml

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape> <gradient android:type="sweep" android:endColor="#3C0000" android:startColor="#FF0202" /> <corners android:radius="10.0dip" /> </shape> </item></selector>

gradient_circle.xml

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > <gradient android:centerColor="#0f0" android:endColor="#f00" android:startColor="#f00" android:type="sweep" /> <size android:height="400dp" android:width="400dp" /> </shape>

Примеры с shape

Овальный кабинет

В Белом доме есть Овальный кабинет. Если вам придётся писать приложение для администрации президента США, то все элементы нужно сделать овальными. Создадим файл res/drawable/oval.xml:

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > <gradient android:angle="90" android:endColor="#FFFFFFFF" android:startColor="#FF000000" android:type="linear" /> <stroke android:width="1dp" android:color="#FF000000" /> <padding android:bottom="15dp" android:left="15dp" android:right="15dp" android:top="15dp" /> </shape>

Заменим в предыдущем примере android:background="@drawable/roundrect" на android:background="@drawable/oval".

Получим овальный интерфейс:

Подскажите, почему android studio не принимает картинки в папку drawable никакого формата? Появляется ошибка: Refactoring cannot be performed File C:\Users....\cat.png is read-only android-studio android
поделитьсяулучшить этот вопрос изменен 14 сен '14 в 12:24     Виталина 13117 задан 14 сен '14 в 4:44     alex_aru 1
 
   
В Android Studio, на папке drawable нажми на правую кнопку и в выпадающем списке выбери папку drawable. Откроется папка ресурсов, закинь туда картинки и потом в IDE, на той же папке drawable выбери опцию Synchronize 'drawable'. – Nuclominus 14 сен '14 в 4:55
   
Может быть, надо запускать ее от имени администратора? – metalurgus 14 сен '14 в 7:58
   
@metalurgus сомнительно) у меня та же фигня, но студия запускается со всеми правами, приходится добавлять в папку и синхронить. – Nuclominus 15 сен '14 в 9:16

добавить комментарий

1 ответ

текущиестарыеголоса

голос за0голос против В нижней части студии стоит блокировка на изменения файлов в проекте. Нужно нажать на иконку замочка.
поделитьсяулучшить этот ответ отвечен 15 сен '14 в 9:20     Deadkenny 2,163210
 
   
i.imgur.com/cqFKi30.png не уверен. Все норм, может из-за русских букв в пути, но уже и это проверил...– Nuclominus 15 сен '14 в 9:32
   
Сам файл находится в директории текущего пользователя? – Deadkenny 15 сен '14 в 9:51
   
Спасибо огромное, целый месяц с этим мучался. – Георгий99 26 сен '14 в 16:16

 

В этом уроке:

- изучаем drawable теги: <bitmap>, <layer-list>, <selector>

Продолжаем разбирать типы Drawable, которые можно описывать с помощью XML-разметки. Проектов в этом уроке создавать не будем. Я просто буду в своем проекте создавать XML-файлы в папке drawable и ставить их фоном для View. А в тексте урока приведу код и скрины. Иногда буду вешать дополнительно серый фон, чтобы был виден реальный размер View.

Чтобы программно добраться до Drawable, который вы для View повесили как фон, надо просто вызвать метод getBackground.

 

Bitmap

Тег <bitmap> позволяет получить Drawable обертку для Bitmap. У тега есть несколько атрибутов.

В атрибуте src указываем нужный нам файл-изображение.

Атрибут gravity указывает, как bitmap будет располагаться внутри Drawable. Можно использовать несколько значений, разделенных знаком |. Значения тут стандартные, и некоторые из них мы часто используем при работе с layout. Рассмотрим пример.

<?xml version= "1.0" encoding= "utf-8"?>
<bitmap
xmlns:android= "http://schemas.android.com/apk/res/android"
android:gravity= "top|left"
android:src= "@drawable/ic_launcher" >
</bitmap>

Значение атрибута gravity сдвигает изображение влево-вверх

 

Далее ставим следующие значение атрибута gravity:

center - центр

 

fill_horizontal - растянуть по горизонтали

 

fill - растянуть (используется по умолчанию)

 

Насколько я понял, значения clip_vertical и clip_horizontal идентичны значениям fill_vertical и fill_horizontal в случае когда Bitmap по размеру больше, чем предоставляемое ему пространство. Т.е. clip_vertical сожмет его по вертикали, так чтобы он влез. А clip_horizontal - по горизонтали.

 

Атрибут tileMode - это режим «плитки». Позволяет замостить вашим изображением все доступное пространство. По умолчанию он имеет значение disabled.

Для примера я создам такой bitmap.

Четыре разных цвета, внутренние границы - сплошные, внешние - пунктиром.

 

Пример кода:

<?xml version= "1.0" encoding= "utf-8"?>
<bitmap
xmlns:android= "http://schemas.android.com/apk/res/android"
android:src= "@drawable/tilemode"
android:tileMode= "repeat" >
</bitmap>

Если tileMode = repeat, то Bitmap будет размножен и займет все доступное пространство

 

Далее меняем значение атрибута tileMode.

mirror – Bitmap также будет размножен, но при этом он будет чередоваться со своим отражением

 

clamp – растягивает края картинки на все свободное пространство

 

Прочие атрибуты тега <bitmap>:

antialias – сглаживание линий

dither – преобразование цветов, если текущей палитры недостаточно для отображения

filter – фильтр при сжатии или растягивании (пример результата использования есть в Уроке 158)

mipMap – использование mip-текстурирования. Про него можно почитать в википедии. Используйте этот режим, если планируете в процессе отображения уменьшать bitmap более чем в два раза.

 

Мы рассмотрели XML-описание, но вы всегда можете создать этот объект и программно. Java-реализация – класс BitmapDrawable.

 

 

Layer List

Мы можем описать Drawable, который будет состоять из нескольких Drawable-слоев. Для этого используется тег <layer-list>, а внутри него теги <item>.

Пример:

<?xml version= "1.0" encoding= "utf-8"?>
<layer-list
xmlns:android= "http://schemas.android.com/apk/res/android" >
<item
android:left= "5dp" >
<bitmap
android:gravity= "left|top"
android:src= "@drawable/ic_launcher" >
</bitmap>
</item>
<item>
<bitmap
android:gravity= "center"
android:src= "@drawable/ic_launcher" >
</bitmap>
</item>
<item
android:id= "@+id/someDrawable"
android:bottom= "20dp"
android:top= "20dp" >
<shape
android:shape= "rectangle" >
<stroke
android:width= "1dp"
android:color= "#000000" >
</stroke>
</shape>
</item>
<item
android:right= "5dp" >
<bitmap
android:gravity= "right|bottom"
android:src= "@drawable/ic_launcher" >
</bitmap>
</item>
</layer-list>

У нас 4 слоя. Три bitmap со стандартной иконкой и одна фигура. Атрибуты left, top, right, bottom позволяют указывать отступы. А в атрибуте id можно указать id этого Drawable-слоя.



Поделиться:


Последнее изменение этой страницы: 2017-01-27; просмотров: 604; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.138.174.174 (0.251 с.)