SlideShare a Scribd company logo
17 November 2020
Canvas API in Android
Android Weekly Sharing @ LMWN
Canvas
A container that holds various drawing elements
Basic Drawing Component in Android
• Bitmap

• Canvas

• Drawing Primitive

• Paint
Hold the pixels

Host the draw calls

Rect, Path, Text, Bitmap, …

Describe the color and styles for the drawing
Basic Drawing Component in Android
• Bitmap

• Canvas

• Drawing Primitive

• Paint
Hold the pixels

Host the draw calls

Rect, Path, Text, Bitmap, …

Describe the color and styles for the drawing
Basic Drawing Component in Android
• Bitmap

• Canvas

• Drawing Primitive

• Paint
Hold the pixels

Host the draw calls

Rect, Path, Text, Bitmap, …

Describe the color and styles for the drawing
Basic Drawing Component in Android
• Bitmap

• Canvas

• Drawing Primitive

• Paint
Hold the pixels

Host the draw calls

Rect, Path, Text, Bitmap, …

Describe the color and styles for the drawing
class CustomView: View {
override fun onMeasure( /* ... */ ) { /* ... */ }
override fun onLayout( /* ... */ ) { /* ... */ }
override fun onDraw(canvas: Canvas?) {
super.onDraw(canvas)
// ...
}
}
Canvas

Drawing Primitives

Paint

Compositing Mode
Drawn out: How
Android Renders 

(Google I/O '18)
val bitmap = Bitmap.createBitmap(
1280,
720,
Bitmap.Config.ARGB_8888
)
val canvas = Canvas(bitmap)
Canvas

Drawing Primitives

Paint

Compositing Mode
Point

Line

Rect

Arc

Round Rect

Circle

Color

Path

Text

Bitmap
val canvas: Canvas = /* ... */
val paint: Paint = /* ... */
val x = 20f
val y = 20f
canvas.drawPoint(x, y, paint)
Canvas

Drawing Primitives

Paint

Compositing Mode
Point
Point

Line

Rect

Arc

Round Rect

Circle

Color

Path

Text

Bitmap
val canvas: Canvas = /* ... */
val paint: Paint = /* ... */
val startX = 30f
val startY = 30f
val endX = 100f
val endY = 100f
canvas.drawLine(
startX,
startY,
endX,
endY,
paint
)
Canvas

Drawing Primitives

Paint

Compositing Mode
นี่คือ Line
อันนี้ก็ LINE
val canvas: Canvas = /* ... */
val paint: Paint = /* ... */
val left = 20f
val top = 20f
val right = 200f
val bottom = 150f
canvas.drawRect(
left,
top,
right,
bottom,
paint
)
Canvas

Drawing Primitives

Paint

Compositing Mode
Point

Line

Rect

Arc

Round Rect

Circle

Color

Path

Text

Bitmap
val canvas: Canvas = /* ... */
val paint: Paint = /* ... */
val rect = RectF(
20f,
20f,
200f,
150f
)
canvas.drawRect(rect, paint)
Canvas

Drawing Primitives

Paint

Compositing Mode
Point

Line

Rect

Arc

Round Rect

Circle

Color

Path

Text

Bitmap
val canvas: Canvas = /* ... */
val paint: Paint = /* ... */
val left = 100f
val top = 100f
val right = 200f
val bottom = 200f
val startAngle = 160f
val sweepAngle = 180f
val useCenter = false
canvas.drawArc(
left, top, right, bottom,
startAngle, sweepAngle,
useCenter, paint
)
Canvas

Drawing Primitives

Paint

Compositing Mode
Point

Line

Rect

Arc

Round Rect

Circle

Color

Path

Text

Bitmap
Canvas

Drawing Primitives

Paint

Compositing Mode
val left = 100f
val top = 100f
val right = 200f
val bottom = 200f
val startAngle = 160f
val sweepAngle = 180f
(100, 100)
(200, 200)
Point

Line

Rect

Arc

Round Rect

Circle

Color

Path

Text

Bitmap
Canvas

Drawing Primitives

Paint

Compositing Mode
val left = 100f
val top = 100f
val right = 200f
val bottom = 200f
val startAngle = 160f
val sweepAngle = 180f
270°
90°
0°180°
Point

Line

Rect

Arc

Round Rect

Circle

Color

Path

Text

Bitmap
Canvas

Drawing Primitives

Paint

Compositing Mode
val left = 100f
val top = 100f
val right = 200f
val bottom = 200f
val startAngle = 160f
val sweepAngle = 180f
Sweep 180°
Start at 160°
Point

Line

Rect

Arc

Round Rect

Circle

Color

Path

Text

Bitmap
val canvas: Canvas = /* ... */
val paint: Paint = /* ... */
val rectF = RectF(
20f,
20f,
200f,
150f)
val radius = 10f
canvas.drawRoundRect(
rectF,
radius,
radius,
paint
)
Canvas

Drawing Primitives

Paint

Compositing Mode
Point

Line

Rect

Arc

Round Rect

Circle

Color

Path

Text

Bitmap
val canvas: Canvas = /* ... */
val paint: Paint = /* ... */
canvas.drawCircle(
100f,
100f,
50f,
paint
)
Canvas

Drawing Primitives

Paint

Compositing Mode
Point

Line

Rect

Arc

Round Rect

Circle

Color

Path

Text

Bitmap
val canvas: Canvas = /* ... */
canvas.drawColor(Color.parseColor("#28353E"))
Canvas

Drawing Primitives

Paint

Compositing Mode
Point

Line

Rect

Arc

Round Rect

Circle

Color

Path

Text

Bitmap
val canvas: Canvas = /* ... */
val paint: Paint = /* ... */
val path = Path().apply {
moveTo(20f, 20f)
lineTo(40f, 20f)
arcTo(
RectF(40f, 5f, 70f, 35f),
180f, -180f, false
)
lineTo(90f, 20f)
lineTo(90f, 90f)
lineTo(20f, 90f)
close()
}
canvas.drawPath(path, paint)
Canvas

Drawing Primitives

Paint

Compositing Mode
Point

Line

Rect

Arc

Round Rect

Circle

Color

Path

Text

Bitmap
val canvas: Canvas = /* ... */
val paint: Paint = /* ... */
val path = Path().apply {
moveTo(20f, 20f)
lineTo(40f, 20f)
arcTo(
RectF(40f, 5f, 70f, 35f),
180f, -180f, false
)
lineTo(90f, 20f)
lineTo(90f, 90f)
lineTo(20f, 90f)
close()
}
canvas.drawPath(path, paint)
Canvas

Drawing Primitives

Paint

Compositing Mode
Point

Line

Rect

Arc

Round Rect

Circle

Color

Path

Text

Bitmap
Canvas

Drawing Primitives

Paint

Compositing Mode
Point

Line

Rect

Arc

Round Rect

Circle

Color

Path

Text

Bitmap
val canvas: Canvas = /* ... */
val paint: Paint = /* ... */
val path = Path().apply {
moveTo(20f, 20f)
lineTo(40f, 20f)
arcTo(
RectF(40f, 5f, 70f, 35f),
180f, -180f, false
)
lineTo(90f, 20f)
lineTo(90f, 90f)
lineTo(20f, 90f)
close()
}
canvas.drawPath(path, paint)
Canvas

Drawing Primitives

Paint

Compositing Mode
Point

Line

Rect

Arc

Round Rect

Circle

Color

Path

Text

Bitmap
val canvas: Canvas = /* ... */
val paint: Paint = /* ... */
val path = Path().apply {
moveTo(20f, 20f)
lineTo(40f, 20f)
arcTo(
RectF(40f, 5f, 70f, 35f),
180f, -180f, false
)
lineTo(90f, 20f)
lineTo(90f, 90f)
lineTo(20f, 90f)
close()
}
canvas.drawPath(path, paint)
Canvas

Drawing Primitives

Paint

Compositing Mode
Point

Line

Rect

Arc

Round Rect

Circle

Color

Path

Text

Bitmap
val canvas: Canvas = /* ... */
val paint: Paint = /* ... */
val path = Path().apply {
moveTo(20f, 20f)
lineTo(40f, 20f)
arcTo(
RectF(40f, 5f, 70f, 35f),
180f, -180f, false
)
lineTo(90f, 20f)
lineTo(90f, 90f)
lineTo(20f, 90f)
close()
}
canvas.drawPath(path, paint)
Canvas

Drawing Primitives

Paint

Compositing Mode
Point

Line

Rect

Arc

Round Rect

Circle

Color

Path

Text

Bitmap
val canvas: Canvas = /* ... */
val paint: Paint = /* ... */
val path = Path().apply {
moveTo(20f, 20f)
lineTo(40f, 20f)
arcTo(
RectF(40f, 5f, 70f, 35f),
180f, -180f, false
)
lineTo(90f, 20f)
lineTo(90f, 90f)
lineTo(20f, 90f)
close()
}
canvas.drawPath(path, paint)
Canvas

Drawing Primitives

Paint

Compositing Mode
Point

Line

Rect

Arc

Round Rect

Circle

Color

Path

Text

Bitmap
val canvas: Canvas = /* ... */
val paint: Paint = /* ... */
val path = Path().apply {
moveTo(20f, 20f)
lineTo(40f, 20f)
arcTo(
RectF(40f, 5f, 70f, 35f),
180f, -180f, false
)
lineTo(90f, 20f)
lineTo(90f, 90f)
lineTo(20f, 90f)
close()
}
canvas.drawPath(path, paint)
Canvas

Drawing Primitives

Paint

Compositing Mode
Point

Line

Rect

Arc

Round Rect

Circle

Color

Path

Text

Bitmap
val canvas: Canvas = /* ... */
val paint: Paint = /* ... */
val path = Path().apply {
moveTo(20f, 20f)
lineTo(40f, 20f)
arcTo(
RectF(40f, 5f, 70f, 35f),
180f, -180f, false
)
lineTo(90f, 20f)
lineTo(90f, 90f)
lineTo(20f, 90f)
close()
}
canvas.drawPath(path, paint)
Point

Line

Rect

Arc

Round Rect

Circle

Color

Path

Text

Bitmap
val canvas: Canvas = /* ... */
val paint: Paint = /* ... */
val text = "LINE MAN Wongnai"
val x = 20f
val y = 100f
canvas.drawText(text, x, y, paint)
Canvas

Drawing Primitives

Paint

Compositing Mode
LINE MAN Wongnai
Point

Line

Rect

Arc

Round Rect

Circle

Color

Path

Text

Bitmap
val canvas: Canvas = /* ... */
val paint: Paint = /* ... */
val text = "LINE MAN Wongnai"
val x = 20f
val y = 100f
canvas.drawText(text, x, y, paint)
Canvas

Drawing Primitives

Paint

Compositing Mode
LINE MAN Wongnai
Point

Line

Rect

Arc

Round Rect

Circle

Color

Path

Text

Bitmap
val canvas: Canvas = /* ... */
val paint: Paint = /* ... */
val left = 10f
val top = 10f
val bitmap: Bitmap = /* ... */
canvas.drawBitmap(
bitmap,
left,
top,
paint
)
Canvas

Drawing Primitives

Paint

Compositing Mode
Point

Line

Rect

Arc

Round Rect

Circle

Color

Path

Text

Bitmap
val canvas: Canvas = /* ... */
val paint: Paint = /* ... */
val bitmap: Bitmap = /* ... */
val source = Rect(
0,
0,
bitmap.width,
bitmap.height
)
val destination = Rect(
0,
0,
bitmap.width / 2,
bitmap.height / 2
)
canvas.drawBitmap(bitmap, source, destination, paint)
Canvas

Drawing Primitives

Paint

Compositing Mode
Point

Line

Rect

Arc

Round Rect

Circle

Color

Path

Text

Bitmap
val canvas: Canvas = /* ... */
val paint: Paint = /* ... */
val bitmap: Bitmap = /* ... */
val source: Rect = /* ... */
val left = 10f
val top = 10f
val destination = RectF(
0 + left,
0 + top,
(bitmap.width / 2) + left,
(bitmap.height / 2) + top
)
canvas.drawBitmap(bitmap, source, destination, paint)
Canvas

Drawing Primitives

Paint

Compositing Mode
val paint = Paint().apply {
/* ... */
}
Canvas

Drawing Primitives

Paint

Compositing Mode
val paint = Paint().apply {
/* ... */
isAntiAlias = true
}
Canvas

Drawing Primitives

Paint

Compositing Mode
val paint = Paint().apply {
/* ... */
style = Paint.Style.FILL
}
Canvas

Drawing Primitives

Paint

Compositing Mode
Paint.Style.FILL
Paint.Style.STROKE
Paint.Style.FILL_AND_STROKE
val paint = Paint().apply {
/* ... */
strokeCap = /* ... */
strokeJoin = /* ... */
strokeMiter = /* ... */
strokeWidth = /* ... */
}
Canvas

Drawing Primitives

Paint

Compositing Mode
val paint = Paint().apply {
/* ... */
color = /* 8-bit RGB */
alpha = /* 8-bit Alpha */
}
Canvas

Drawing Primitives

Paint

Compositing Mode
val context: Context = /* ... */
val paint = Paint().apply {
/* ... */
textSize = 32f
typeface = ResourcesCompat.getFont(context, R.font.sarabun)
}
Canvas

Drawing Primitives

Paint

Compositing Mode
val paint = Paint().apply {
/* ... */
textAlign = /* ... */
letterSpacing = /* ... */
isFakeBoldText = /* ... */
isLinearText = /* ... */
isStrikeThruText = /* ... */
isSubpixelText = /* ... */
isUnderlineText = /* ... */
fontFeatureSettings = /* ... */
fontMetrics = /* ... */
fontSpacing = /* ... */
isElegantTextHeight = /* ... */
}
Canvas

Drawing Primitives

Paint

Compositing Mode
val paint = Paint().apply {
/* ... */
textSize = /* ... */
typeface = /* ... */
}
val width: Float = paint.measureText("LINE MAN Wongnai")
Canvas

Drawing Primitives

Paint

Compositing Mode
val paint = Paint().apply {
/* ... */
maskFilter = BlurMaskFilter(
10f,
BlurMaskFilter.Blur.NORMAL
)
}
Canvas

Drawing Primitives

Paint

Compositing Mode
val canvas: Canvas = /* ... */
// Clear all
canvas.drawColor(Color.WHITE, PorterDuff.Mode.CLEAR)
Canvas

Drawing Primitives

Paint

Compositing Mode
Compositing Mode
“Compositing Digital Images” by Thomas Porter and Tom Duff
Canvas

Drawing Primitives

Paint

Compositing Mode
android.graphics.PorterDuff.Mode
Compositing Mode
Source Destination
Canvas

Drawing Primitives

Paint

Compositing Mode
Compositing Mode
Mode.ADD
Mode.CLEAR
Mode.DARKEN
Canvas

Drawing Primitives

Paint

Compositing Mode
Compositing Mode
Mode.DST
Mode.DST_ATOP
Mode.DST_IN
Canvas

Drawing Primitives

Paint

Compositing Mode
Compositing Mode
Mode.DST_OUT
Mode.DST_OVER
Mode.LIGHTEN
Canvas

Drawing Primitives

Paint

Compositing Mode
Compositing Mode
Mode.MULTIPLY
Mode.OVERLAY
Mode.SCREEN
Canvas

Drawing Primitives

Paint

Compositing Mode
Compositing Mode
Mode.SRC
Mode.SRC_ATOP
Mode.SRC_IN
Canvas

Drawing Primitives

Paint

Compositing Mode
Compositing Mode
Mode.SRC_OUT
Mode.SRC_OVER
Mode.XOR
Canvas

Drawing Primitives

Paint

Compositing Mode
Compositing Mode Canvas

Drawing Primitives

Paint

Compositing Mode
αout
Cout = Csrc + Cdst - Csrc * Cdst
= αsrc + αdst - αsrc * αdst
Compositing Mode Canvas

Drawing Primitives

Paint

Compositing Mode
#FF2196F3
#FFE91E63
A 255, R 33, G 150, B 243
A 255, R 233, G 30, B 99
αout
Cout = Csrc + Cdst - Csrc * Cdst
= αsrc + αdst - αsrc * αdst
Compositing Mode Canvas

Drawing Primitives

Paint

Compositing Mode
#FF2196F3
#FFE91E63
A1.000, R0.129, G0.588, B0.952
A1.000, R0.913, G0.117, B0.388
αout
Cout = Csrc + Cdst - Csrc * Cdst
= αsrc + αdst - αsrc * αdst
Compositing Mode
αout
Canvas

Drawing Primitives

Paint

Compositing Mode
Cred
#FF2196F3
#FFE91E63
A1.000, R0.129, G0.588, B0.952
A1.000, R0.913, G0.117, B0.388
= 0.129 + 0.913 - 0.129 * 0.913
= 1 + 1 - 1 * 1
Cgreen
Cblue
= 0.588 + 0.117 - 0.588 * 0.117
= 0.952 + 0.388 - 0.952 * 0.388
Compositing Mode
αout
Canvas

Drawing Primitives

Paint

Compositing Mode
Cred
#FF2196F3
#FFE91E63
= 0.924223
= 1
Cgreen
Cblue
= 0.636204
= 0.970624
Compositing Mode
αout
Canvas

Drawing Primitives

Paint

Compositing Mode
Cred
#FF2196F3
#FFE91E63
= 0.924223 * 255
= 1 * 255
Cgreen
Cblue
= 0.636204 * 255
= 0.970624 * 255
Compositing Mode
αout
Canvas

Drawing Primitives

Paint

Compositing Mode
Cred
#FF2196F3
#FFE91E63
= 235 EB
= 255 FF
Cgreen
Cblue
= 162 A2
= 247 F7
#FFEBA2F7
Compositing Mode
αout
Canvas

Drawing Primitives

Paint

Compositing Mode
Cred
#FF2196F3
#FFE91E63
= 235 EB
= 255 FF
Cgreen
Cblue
= 162 A2
= 247 F7
Mode.SCREEN
#FFEBA2F7
Mode.LIGHTEN
Mode.DARKEN
Mode.OVERLAY
Mode.ADD
Compositing Mode
αout
Canvas

Drawing Primitives

Paint

Compositing Mode
Cred
#FF2196F3
#FFE91E63
= 235 EB
= 255 FF
Cgreen
Cblue
= 162 A2
= 247 F7
Mode.SCREEN
#FFEBA2F7
val paint = Paint().apply {
xfermode = PorterDuffXfermode(PorterDuff.Mode.OVERLAY)
}
Canvas

Drawing Primitives

Paint

Compositing Mode
Q & A

More Related Content

Similar to Canvas API in Android

HTML 5 Canvas & SVG
HTML 5 Canvas & SVGHTML 5 Canvas & SVG
HTML 5 Canvas & SVG
Ofir's Fridman
 
Charting like a pro - Guy Griv, Pepper
Charting like a pro - Guy Griv, PepperCharting like a pro - Guy Griv, Pepper
Charting like a pro - Guy Griv, Pepper
DroidConTLV
 
canvas_1.pptx
canvas_1.pptxcanvas_1.pptx
canvas_1.pptx
RutujRunwal1
 
HTML5 Canvas - Basics.pptx
HTML5 Canvas - Basics.pptxHTML5 Canvas - Basics.pptx
HTML5 Canvas - Basics.pptx
AhmadAbba6
 
Chapter 13
Chapter 13Chapter 13
Chapter 13
Terry Yoast
 
Scmad Chapter06
Scmad Chapter06Scmad Chapter06
Scmad Chapter06
Marcel Caraciolo
 
Javascript Canvas API
Javascript Canvas APIJavascript Canvas API
Javascript Canvas API
Samuel Santos
 
Canvas
CanvasCanvas
Learn Creative Coding: Begin Programming with the Processing Language
Learn Creative Coding: Begin Programming with the Processing LanguageLearn Creative Coding: Begin Programming with the Processing Language
Learn Creative Coding: Begin Programming with the Processing Language
shelfrog
 
Learn Creative Coding: Begin Programming with the Processing Language
Learn Creative Coding: Begin Programming with the Processing LanguageLearn Creative Coding: Begin Programming with the Processing Language
Learn Creative Coding: Begin Programming with the Processing Language
W M Harris
 
DotNetNuke World CSS3
DotNetNuke World CSS3DotNetNuke World CSS3
DotNetNuke World CSS3
gravityworksdd
 
[C++ GUI Programming with Qt4] chap8
[C++ GUI Programming with Qt4] chap8[C++ GUI Programming with Qt4] chap8
[C++ GUI Programming with Qt4] chap8
Picker Weng
 

Similar to Canvas API in Android (12)

HTML 5 Canvas & SVG
HTML 5 Canvas & SVGHTML 5 Canvas & SVG
HTML 5 Canvas & SVG
 
Charting like a pro - Guy Griv, Pepper
Charting like a pro - Guy Griv, PepperCharting like a pro - Guy Griv, Pepper
Charting like a pro - Guy Griv, Pepper
 
canvas_1.pptx
canvas_1.pptxcanvas_1.pptx
canvas_1.pptx
 
HTML5 Canvas - Basics.pptx
HTML5 Canvas - Basics.pptxHTML5 Canvas - Basics.pptx
HTML5 Canvas - Basics.pptx
 
Chapter 13
Chapter 13Chapter 13
Chapter 13
 
Scmad Chapter06
Scmad Chapter06Scmad Chapter06
Scmad Chapter06
 
Javascript Canvas API
Javascript Canvas APIJavascript Canvas API
Javascript Canvas API
 
Canvas
CanvasCanvas
Canvas
 
Learn Creative Coding: Begin Programming with the Processing Language
Learn Creative Coding: Begin Programming with the Processing LanguageLearn Creative Coding: Begin Programming with the Processing Language
Learn Creative Coding: Begin Programming with the Processing Language
 
Learn Creative Coding: Begin Programming with the Processing Language
Learn Creative Coding: Begin Programming with the Processing LanguageLearn Creative Coding: Begin Programming with the Processing Language
Learn Creative Coding: Begin Programming with the Processing Language
 
DotNetNuke World CSS3
DotNetNuke World CSS3DotNetNuke World CSS3
DotNetNuke World CSS3
 
[C++ GUI Programming with Qt4] chap8
[C++ GUI Programming with Qt4] chap8[C++ GUI Programming with Qt4] chap8
[C++ GUI Programming with Qt4] chap8
 

More from Somkiat Khitwongwattana

What's new in Android - Google I/O Extended Bangkok 2022
What's new in Android - Google I/O Extended Bangkok 2022What's new in Android - Google I/O Extended Bangkok 2022
What's new in Android - Google I/O Extended Bangkok 2022
Somkiat Khitwongwattana
 
Get Ready for Target SDK Version 29 and 30
Get Ready for Target SDK Version 29 and 30Get Ready for Target SDK Version 29 and 30
Get Ready for Target SDK Version 29 and 30
Somkiat Khitwongwattana
 
What's new in Android P @ I/O Extended Bangkok 2018
What's new in Android P @ I/O Extended Bangkok 2018What's new in Android P @ I/O Extended Bangkok 2018
What's new in Android P @ I/O Extended Bangkok 2018
Somkiat Khitwongwattana
 
New things that android developer should not miss in 2019
New things that android developer should not miss in 2019New things that android developer should not miss in 2019
New things that android developer should not miss in 2019
Somkiat Khitwongwattana
 
Architecture Components In Real Life Season 2
Architecture Components In Real Life Season 2Architecture Components In Real Life Season 2
Architecture Components In Real Life Season 2
Somkiat Khitwongwattana
 
Bitmap management like a boss
Bitmap management like a bossBitmap management like a boss
Bitmap management like a boss
Somkiat Khitwongwattana
 
Android Architecture Component in Real Life
Android Architecture Component in Real LifeAndroid Architecture Component in Real Life
Android Architecture Component in Real Life
Somkiat Khitwongwattana
 
Hello, Android Studio 3.2 & Android App Bundle @ I/O Extended Bangkok 2018
Hello, Android Studio 3.2 & Android App Bundle @ I/O Extended Bangkok 2018Hello, Android Studio 3.2 & Android App Bundle @ I/O Extended Bangkok 2018
Hello, Android Studio 3.2 & Android App Bundle @ I/O Extended Bangkok 2018
Somkiat Khitwongwattana
 
Deep Dive Into Repository - Android Architecture Components
Deep Dive Into Repository - Android Architecture ComponentsDeep Dive Into Repository - Android Architecture Components
Deep Dive Into Repository - Android Architecture Components
Somkiat Khitwongwattana
 
Introduction to Architecture Components @ Google I/O Extended Bangkok 2017
Introduction to Architecture Components @ Google I/O Extended Bangkok 2017Introduction to Architecture Components @ Google I/O Extended Bangkok 2017
Introduction to Architecture Components @ Google I/O Extended Bangkok 2017
Somkiat Khitwongwattana
 
What's new in Android O @ Google I/O Extended Bangkok 2017
What's new in Android O @ Google I/O Extended Bangkok 2017What's new in Android O @ Google I/O Extended Bangkok 2017
What's new in Android O @ Google I/O Extended Bangkok 2017
Somkiat Khitwongwattana
 
Pokemon GO 101@Nextzy
Pokemon GO 101@NextzyPokemon GO 101@Nextzy
Pokemon GO 101@Nextzy
Somkiat Khitwongwattana
 
Advance Android Layout Walkthrough
Advance Android Layout WalkthroughAdvance Android Layout Walkthrough
Advance Android Layout Walkthrough
Somkiat Khitwongwattana
 
Interface Design for Mobile Application
Interface Design for Mobile ApplicationInterface Design for Mobile Application
Interface Design for Mobile Application
Somkiat Khitwongwattana
 
Smart Lock for Password @ Game DevFest Bangkok 2015
Smart Lock for Password @ Game DevFest Bangkok 2015Smart Lock for Password @ Game DevFest Bangkok 2015
Smart Lock for Password @ Game DevFest Bangkok 2015
Somkiat Khitwongwattana
 
Whats new in Android Development Tools @ I/O Rewind Bangkok
Whats new in Android Development Tools @ I/O Rewind BangkokWhats new in Android Development Tools @ I/O Rewind Bangkok
Whats new in Android Development Tools @ I/O Rewind Bangkok
Somkiat Khitwongwattana
 
What's new in Google Play Services @ I/O Rewind Bangkok
What's new in Google Play Services @ I/O Rewind BangkokWhat's new in Google Play Services @ I/O Rewind Bangkok
What's new in Google Play Services @ I/O Rewind Bangkok
Somkiat Khitwongwattana
 
ListView and Custom ListView on Android Development [Thai]
ListView and Custom ListView on Android Development [Thai]ListView and Custom ListView on Android Development [Thai]
ListView and Custom ListView on Android Development [Thai]
Somkiat Khitwongwattana
 

More from Somkiat Khitwongwattana (18)

What's new in Android - Google I/O Extended Bangkok 2022
What's new in Android - Google I/O Extended Bangkok 2022What's new in Android - Google I/O Extended Bangkok 2022
What's new in Android - Google I/O Extended Bangkok 2022
 
Get Ready for Target SDK Version 29 and 30
Get Ready for Target SDK Version 29 and 30Get Ready for Target SDK Version 29 and 30
Get Ready for Target SDK Version 29 and 30
 
What's new in Android P @ I/O Extended Bangkok 2018
What's new in Android P @ I/O Extended Bangkok 2018What's new in Android P @ I/O Extended Bangkok 2018
What's new in Android P @ I/O Extended Bangkok 2018
 
New things that android developer should not miss in 2019
New things that android developer should not miss in 2019New things that android developer should not miss in 2019
New things that android developer should not miss in 2019
 
Architecture Components In Real Life Season 2
Architecture Components In Real Life Season 2Architecture Components In Real Life Season 2
Architecture Components In Real Life Season 2
 
Bitmap management like a boss
Bitmap management like a bossBitmap management like a boss
Bitmap management like a boss
 
Android Architecture Component in Real Life
Android Architecture Component in Real LifeAndroid Architecture Component in Real Life
Android Architecture Component in Real Life
 
Hello, Android Studio 3.2 & Android App Bundle @ I/O Extended Bangkok 2018
Hello, Android Studio 3.2 & Android App Bundle @ I/O Extended Bangkok 2018Hello, Android Studio 3.2 & Android App Bundle @ I/O Extended Bangkok 2018
Hello, Android Studio 3.2 & Android App Bundle @ I/O Extended Bangkok 2018
 
Deep Dive Into Repository - Android Architecture Components
Deep Dive Into Repository - Android Architecture ComponentsDeep Dive Into Repository - Android Architecture Components
Deep Dive Into Repository - Android Architecture Components
 
Introduction to Architecture Components @ Google I/O Extended Bangkok 2017
Introduction to Architecture Components @ Google I/O Extended Bangkok 2017Introduction to Architecture Components @ Google I/O Extended Bangkok 2017
Introduction to Architecture Components @ Google I/O Extended Bangkok 2017
 
What's new in Android O @ Google I/O Extended Bangkok 2017
What's new in Android O @ Google I/O Extended Bangkok 2017What's new in Android O @ Google I/O Extended Bangkok 2017
What's new in Android O @ Google I/O Extended Bangkok 2017
 
Pokemon GO 101@Nextzy
Pokemon GO 101@NextzyPokemon GO 101@Nextzy
Pokemon GO 101@Nextzy
 
Advance Android Layout Walkthrough
Advance Android Layout WalkthroughAdvance Android Layout Walkthrough
Advance Android Layout Walkthrough
 
Interface Design for Mobile Application
Interface Design for Mobile ApplicationInterface Design for Mobile Application
Interface Design for Mobile Application
 
Smart Lock for Password @ Game DevFest Bangkok 2015
Smart Lock for Password @ Game DevFest Bangkok 2015Smart Lock for Password @ Game DevFest Bangkok 2015
Smart Lock for Password @ Game DevFest Bangkok 2015
 
Whats new in Android Development Tools @ I/O Rewind Bangkok
Whats new in Android Development Tools @ I/O Rewind BangkokWhats new in Android Development Tools @ I/O Rewind Bangkok
Whats new in Android Development Tools @ I/O Rewind Bangkok
 
What's new in Google Play Services @ I/O Rewind Bangkok
What's new in Google Play Services @ I/O Rewind BangkokWhat's new in Google Play Services @ I/O Rewind Bangkok
What's new in Google Play Services @ I/O Rewind Bangkok
 
ListView and Custom ListView on Android Development [Thai]
ListView and Custom ListView on Android Development [Thai]ListView and Custom ListView on Android Development [Thai]
ListView and Custom ListView on Android Development [Thai]
 

Recently uploaded

FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
KAMESHS29
 
Large Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial ApplicationsLarge Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial Applications
Rohit Gautam
 
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
Alex Pruden
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
Matthew Sinclair
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
Data structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdfData structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdf
TIPNGVN2
 
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIEnchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Vladimir Iglovikov, Ph.D.
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”
Claudio Di Ciccio
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
名前 です男
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
Quotidiano Piemontese
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
Kumud Singh
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
Neo4j
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Aggregage
 

Recently uploaded (20)

FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
 
Large Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial ApplicationsLarge Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial Applications
 
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
Data structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdfData structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdf
 
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIEnchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
 

Canvas API in Android