Татьяна Распутина
Какие бывают типы ресурсов?
Зачем экспортировать ресурсы?
aapt - Android Asset Packaging Tool - инструмент запаковки ресурсов
android.content.res.Resources - менеджер ресурсов, генерирует мапу ресурсов (файл c константами)
app.packagename.R.* - ключи ресурсов
Важно: позволяет с помощью аннотаций провалидировать ожидаемый ресурс на этапе компиляции
locale
smallest screen width
version
density
size
Device Configuration:
Screen orientation: landscape
Screen pixel density: hdpi
Screen size: large
Touchscreen type: finger
Resource folder:
res/drawable
res/drawable-notouch
res/drawable-land
res/drawable-land-ldpi
res/drawable-land-finger
res/drawable-hdpi
res/drawable-land-finger
val bitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888)
ALPHA_8
RGB_565
ARGB_8888
val stream = FileOutputStream("image.jpg")
bitmap.compress(CompressFormat.JPEG, 50, stream)
stream.close()
BitmapFactory.decodeStream(
FileInputStream(file), // InputStream
null, // Rect - padding rect for bitmap
options // BitmapFactory.Options - downsampling
)
BitmapFactory.decodeResource(resources, R.drawable.ic_image)
BitmapFactory.decodeFile(imagePath, options)
Выполняет операции рисования
override fun onDraw(canvas: Canvas) // method of View's lifecycle, where we can draw on Canvas
Определяет с какими параметрами рисовать на Canvas
Градиент: Shader
Замкнутый контур, соединенный линиями или кривыми
Методы относительного перемещения
Абстрактный класс для рисования
Обертка над Bitmap
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_cool_icon">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ic_cool_icon">
imageView.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_cool_icon)) // src
imageView.setBackgroundResource(R.drawable.ic_cool_icon) // background
<View
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/cool_color">
imageView.setImageDrawable(ColorDrawable(R.color.black))
Drawable, который может меняться в зависимости от состояния View
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:drawable="@drawable/bttn_grey_disabled"/>
<item android:state_pressed="true" android:drawable="@drawable/bttn_orange_selected"/>
<item android:drawable="@drawable/bttn_orange_normal"/>
</selector>
val stateListDrawable = StateListDrawable()
stateListDrawable.addState(intArrayOf(android.R.attr.state_pressed), ContextCompat.getDrawable(context, R.drawable.bttn_orange_selected))
stateListDrawable.addState(StateSet.WILD_CARD, ContextCompat.getDrawable(context, R.drawable.bttn_orange_normal))
view.setBackground(stateListDrawable)
Drawable, который умеет рисовать примитивные фигуры
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="@color/fill_color">
<stroke
android:width="@dimen/stroke_width"
android:color="@color/border_color">
</shape>
val shapeDrawable = ShapeDrawable(OvalShape())
shapeDrawable.paint.strokeWidth = context.getResources().getDimension(R.dimen.stroke_width)
shapeDrawable.paint.style = Paint.Style.FILL
view.setBackground(shapeDrawable);
Drawable, который умеет растягиваться
Glide
.with(context)
.load(url)
.placeholder(R.drawable.loading_spinner)
.into(imageView)
Загрузка вместе с жизненным циклом Activity:
fun with(android.app.Activity activity): RequestManager
Загрузка вместе с жизненным циклом Fragment:
fun with(android.support.v4.app.Fragment fragment): RequestManager
Context - это контекст приложения:
fun with(android.content.Context context): RequestManager
Загрузка вместе с жизненным циклом Activity или Fragment, которые содержат View:
fun with(android.view.View view): RequestManager
Важно: запросы должны быть вызваны от контекста, на котором результат будет использоваться.
Built in types:
Using default transformations:
Glide
.with(fragment)
.load(url)
.fitCenter()
.into(imageView)
Using RequestOptions:
Glide
.with(context)
.load(url)
.apply(RequestOptions().centerCrop())
.into(imageView)
Using MultiTransformation:
Glide
.with(context)
.load(url)
.transform(MultiTransformation(FitCenter(), CustomTransformation()))
.into(imageView)