SlideShare ist ein Scribd-Unternehmen logo
1 von 118
Custom views
Matej Vukosav
05.04.2018
Agenda
- Just custom views
Coding options
1. bunch of default android views
- easier to code
- faster
2. custom views
Should we use custom views?
Why DO?
- code readability
Why DO?
- code readability
- reusability
Why DO?
- code readability
- reusability
- improved performance
Why DO?
- code readability
- reusability
- improved performance
- endless possibilities
Why NOT?
- Can be tricky to implement
Why NOT?
- Can be tricky to implement
- Time consuming
- you need to handle everything by yourself
- style, font, text size, rendering on different screens, scaling, aspect ratio, zoom,
- all kind of click listeners, orientation
Why NOT?
- Can be tricky to implement
- Time consuming
- you need to handle everything by yourself
- style, font, text size, rendering on different screens, scaling, aspect ratio, zoom,
- all kind of click listeners, orientation
- required more coding skill
Ideas
?
Ideas
- volume control
Ideas
- volume control
- color picker
Ideas
- volume control
- color picker
- compass
Ideas
- volume control
- color picker
- compass
- graph
Ideas
- volume control
- color picker
- compass
- graphs
Ideas
- volume control
- color picker
- compass
- graph
- measurement
Ideas
- volume control
- color picker
- compass
- graph
- measurement
Ideas
- volume control
- color picker
- compass
- graph
- measurement
Ideas
- volume control
- color picker
- compass
- graph
- measurement
Ideas
- volume control
- color picker
- compass
- graph
- measurement
How Android draw
views?
How Android draws views?
XML layout -> instantiated -> inflated -> allocated views ->
How Android draws views?
XML layout -> instantiated -> inflated -> allocated views -> view hierarchy
How Android draws views?
Phases before view hierarchy comes to screen:
1. measure
2. layout
3. draw
How Android draws views?
Phases before view hierarchy comes to screen:
1. measure -> onMeasure()
2. layout
3. draw
How Android draws views?
Phases before view hierarchy comes to screen:
1. measure -> onMeasure()
2. layout -> onLayout()
3. draw
How Android draws views?
Phases before view hierarchy comes to screen:
1. measure -> onMeasure()
2. layout -> onLayout()
3. draw -> onDraw()
How Android draws views?
Phases before view hierarchy comes to screen:
1. measure -> onMeasure()
a. measure the view and its content
b. find how big view should be
c. must call setMeasuredDimension( width, height)
2. layout -> onLayout()
3. draw -> onDraw()
How Android draws views?
Phases before view hierarchy comes to screen:
1. measure -> onMeasure()
2. layout -> onLayout()
a. assign a size and position to each of its children
3. draw -> onDraw()
How Android draws views?
Phases before view hierarchy comes to screen:
1. measure -> onMeasure()
2. layout -> onLayout()
3. draw -> onDraw()
a. draw on canvas
How do we
draw?
Approaches
2 general ways
Approaches
2 general ways
- extend the existing view class
- Button, TextView, EditText, CheckBox, RadioButton
Approaches
2 general ways
- extend the existing view class
- Button, TextView, EditText, CheckBox, RadioButton
- extend the base view class/group class
Approaches
2 general ways
- extend the existing view class
- Button, TextView, EditText, CheckBox, RadioButton
- extend the base view class/group class
Extend the view base class
- extend View class (or subclass)
import android.view.View;
public class MyCustomView extends View{
...
}
Extend the view base class
- extend View class (or subclass)
- constructors
import android.view.View;
public class MyCustomView extends View{
...
}
Extend the view base class
- extend View class (or subclass)
- constructors
- 4 of them
import android.view.View;
public class MyCustomView extends View{
}
Extend the view base class
- extend View class (or subclass)
- constructors
- 4 of them
- but we only need 2
import android.view.View;
public class MyCustomView extends View{
}
Constructors
1. Create new from code - View (Context context)
2. Create from XML - View(Context context, AttributeSet attrs)
3. Create from XML with a style from theme attribute - View(Context
context,AttributeSet atts, int deffStyleAttr)
4. Create from XML with a style from theme attribute or style resource -
View(Context context,AttributeSet atts, int deffStyleAttr, int defStyleRes)
Constructors
1. Create new from code - View (Context context)
2. Create from XML - View(Context context, AttributeSet attrs)
3. Create from XML with a style from theme attribute - View(Context
context,AttributeSet atts, int deffStyleAttr)
4. Create from XML with a style from theme attribute or style resource -
View(Context context,AttributeSet atts, int deffStyleAttr, int defStyleRes)
Constructors
1. Create new from code - View (Context context)
2. Create from XML - View(Context context, AttributeSet attrs)
3. Create from XML with a style from theme attribute - View(Context
context,AttributeSet atts, int deffStyleAttr)
4. Create from XML with a style from theme attribute or style resource -
View(Context context,AttributeSet atts, int deffStyleAttr, int defStyleRes)
Constructors
1. Create new from code - View (Context context)
2. Create from XML - View(Context context, AttributeSet attrs)
3. Create from XML with a style from theme attribute - View(Context
context,AttributeSet atts, int deffStyleAttr)
4. Create from XML with a style from theme attribute or style resource -
View(Context context,AttributeSet atts, int deffStyleAttr, int defStyleRes)
Constructors
1. Create new from code - View (Context context)
2. Create from XML - View(Context context, AttributeSet attrs)
3. Create from XML with a style from theme attribute - View(Context
context,AttributeSet atts, int deffStyleAttr)
4. Create from XML with a style from theme attribute or style resource -
View(Context context,AttributeSet atts, int deffStyleAttr, int defStyleRes)
Constructors
Don’t chain constructors using this!
Constructors
Don’t chain constructors using this!
public CustomTextView( Context context ) {
this( context, null );
}
public CustomTextView( Context context, AttributeSet attrs ) {
this( context, attrs, 0 );
}
public CustomTextView( Context context, AttributeSet attrs, int defStyleAttr )
{
super( context, attrs, defStyleAttr );
...more code...
}
Constructors
Don’t chain constructors using this!
<TextView
android:id="@+id/text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
...
android:text="This is some random irrelevant text."/>
<com.vuki.custom.view.CustomTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/text_view"
...
android:text="This is some random irrelevant text."/>
Constructors
Don’t chain constructors using this!
Constructors
Don’t chain constructors using this!
public CustomTextView( Context context ) {
this( context, null );
}
public CustomTextView( Context context, AttributeSet attrs ) {
this( context, attrs, 0 );
}
public CustomTextView( Context context, AttributeSet attrs, int defStyleAttr )
{
super( context, attrs, defStyleAttr );
...more code...
}
Constructors
Don’t chain constructors using this!
public CustomTextView( Context context ) {
this( context, null );
}
public CustomTextView( Context context, AttributeSet attrs ) {
this( context, attrs, 0 );
}
public CustomTextView( Context context, AttributeSet attrs, int defStyleAttr )
{
super( context, attrs, defStyleAttr );
...more code...
}
Constructors
Don’t chain constructors using this!
public CustomTextView( Context context, AttributeSet attrs ) {
this( context, attrs, 0 );
}
Constructors
Don’t chain constructors using this!
public CustomTextView( Context context, AttributeSet attrs ) {
this( context, attrs, 0 );
}
TEXT VIEW CLASS
public TextView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, R.attr.textViewStyle);
}
super(context, attrs, defStyleAttr );
Constructors
Don’t chain constructors using this!
public CustomTextView( Context context, AttributeSet attrs ) {
this( context, attrs, 0 );
}
public TextView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, R.attr.textViewStyle);
}
super(context, attrs, defStyleAttr ); ??
Constructors
public CustomTextView( Context context ) {
super( context );
init();
}
public CustomTextView( Context context, AttributeSet attrs ) {
super( context, attrs);
init();
}
public CustomTextView( Context context, AttributeSet attrs, int defStyleAttr )
{
super( context, attrs, defStyleAttr );
init();
}
void init(){
...more code..
}
Ok! Can we finally draw
something?
Steps
- extend View class (or subclass)
- constructors - DONE ✔️
- override methods
Steps
- extend View class (or subclass)
- constructors - DONE ✔️
- override methods ( starts with ‘on’ )
- onDraw()
- onMeasure()
- onLayout()
- onSizeChanged()
- ...
Steps
- extend View class (or subclass)
- constructors - DONE ✔️
- override methods ( starts with ‘on’ )
- onDraw()
- onMeasure()
- onLayout()
- onSizeChanged()
onDraw()
- delivers canvas
- draw
- 2D graphics,
- other standard or custom components,
- styled text,
- or anything else you can think of.
Primitives
- lines -> drawLine(..)
- circles -> drawCircle(...)
- rectangles -> drawRect(..)
- oval -> drawOval(...)
- points -> drawPoint(..)
Car?
Ugly Car?
Ugly Car?
Ugly Car?
canvas.drawCircle(x1,y1,radius,paint) canvas.drawCircle(x2,y2,radius,paint)
canvas.drawRect(rect1, paint)
canvas.drawRect(rect1, paint)
What we can do to make it
better?
What we can do to make it better?
Introduce:
- Paint
Paint
- “class that holds the style and color information about how to draw
geometries, text and bitmap”
- canvas.drawSomething( params… , paint)
What we can do to make it better?
Introduce:
- Paint
- Path
Path
- moveTo()
- lineTo()
- bezier
- quadTo() - quadratic bezier
- cubicTo() - cubic bezier
- clipping path
- op (Path, Op)
Path
- moveTo()
- lineTo()
- bezier
- quadTo() - quadratic bezier
- cubicTo() - cubic bezier
- clipping path
- op (Path, Op)
Path
- moveTo()
- lineTo()
- bezier
- quadTo() - quadratic bezier
- cubicTo() - cubic bezier
- clipping path
- op (Path, Op)
- The logical operation that can be performed
when combining two paths.
Ugly Car?
Car
Car
drawPath(path, paint)
What we can do to make it better?
Introduce:
- Paint
- Path
- Shaders
Shaders
“Shader is the based class for objects that return horizontal spans of colors during
drawing.”
Shaders
- LinearGradient
- RadialGradient
- SweepGradient
- BitmapGradient
- ComposeGradient
Shaders
- LinearGradient
- RadialGradient
- SweepGradient
- BitmapGradient
- ComposeGradient
Shaders
- LinearGradient
- RadialGradient
- SweepGradient
- BitmapGradient
- ComposeGradient
Shaders
- LinearGradient
- RadialGradient
- SweepGradient
- BitmapGradient
- ComposeGradient
Shaders
- LinearGradient
- RadialGradient
- SweepGradient
- BitmapGradient
- ComposeGradient
Shaders
- LinearGradient
- RadialGradient
- SweepGradient
- BitmapGradient
- ComposeGradient
ColorFilter
- used with Paint
- modify color of pixels
- LightningColorFilter
- ColorMatrixColorFilter
- PorterDuffColorFilter
ColorFilter
- LightningColorFilter
- ColorMatrixColorFilter
- PorterDuffColorFilter
ColorFilter
- LightningColorFilter
- ColorMatrixColorFilter
- PorterDuffColorFilter
InvertColorMatrix
1, 0, 0, 0, 0 // red
0, 1, 0, 0, 0 //green
0, 0, 1, 0, 0 //blue
0, 0, 0, 1, 0 //alpha
new ColorMatrixColorFilter (matrix)
Grayscale
Sepia
ColorFilter
- LightningColorFilter
- ColorMatrixColorFilter
- PorterDuffColorFilter
PorterDuff.Mode
- “Composing Digital Images”
- 12 compositing operators
- alpha compositing modes
PorterDuff.Mode
- 12 compositing operators
- alpha compositing modes
- blending modes
ColorFilter
- LightningColorFilter
- ColorMatrixColorFilter
- PorterDuffColorFilter
PorterDuff.Mode.SRC_IN
PorterDuff.Mode.XOR
What
else?
Exhaust?
Exhaust?
Electric is better
Animations
- animating view properties
Animations
- ObjectAnimator
- animate with reflection
- ViewPropertyAnimator
- animate some of standard view
properties
- ValueAnimator
- animate some of standar
- AnimatorSet
- chain multiple animators
ObjectAnimator animX =
ObjectAnimator.ofFloat(myView, "x", 50f);
- view must have setter for property
- automatically update the view
Animations
- ObjectAnimator
- animate with reflection
- ViewPropertyAnimator
- animate some of standard view
properties
- ValueAnimator
- animate some of standar
- AnimatorSet
- chain multiple animators
someView.animate()
.alpha(1f)
.scaleX(2.f)
.scaleY(1.f);
Animations
- ObjectAnimator
- animate with reflection
- ViewPropertyAnimator
- animate some of standard view
properties
- ValueAnimator
- any number of properties
- AnimatorSet
- chain multiple animators
PropertyValuesHolder
- holds information about a property
valueAnimator
.setInterpolator( new LinearInterpolator() )
.setEvaluator( new FloatEvaluator() )
.setDuration( 3000 )
.setRepeatCount( INFINITE )
.setRepeatMode( RESTART)
- must implement update listener
Animations
- ObjectAnimator
- animate with reflection
- ViewPropertyAnimator
- animate some of standard view
properties
- ValueAnimator
- any number of properties
- AnimatorSet
- chain multiple animators
PropertyValuesHolder x;
PropertyValuesHolder y;
x=PropertyValuesHolder.ofFloat(“propX”,0,5f)
y=PropertyValuesHolder.ofInt(“propY”,0,30)
valueAnimator.setValues(x,y);
valueAnimator.addUpdateListener({
…..
=animation.getAnimatedValue(“propX”)
=animation.getAnimatedValue(“propY”)
….
})
Animations
- ObjectAnimator
- animate with reflection
- ViewPropertyAnimator
- animate some of standard view
properties
- ValueAnimator
- any number of properties
- PropertyValueHolder
- AnimatorSet
- chain multiple animators
animatorSet
.playSequentially( anim1, anim2)
.playTogether( anim1, anim2 )
State changed
- requestLayout()
- view update through its lifecycle
- invalidate()
- redraw the view
- invalidate from UI thread
- postInvalidate()
- invalidate from non UI thread
Animations
valueAnimator.addUpdateListener({
…..
=animation.getAnimatedValue(“propX”)
=animation.getAnimatedValue(“propY”)
invalidate()
….
})
Animations
Animations
The Car
Now you know
- View anatomy
- How Android draw views
- How we draw views
- View constructors
- View methods
- Paint
- Path
- Shaders
- ColorFilter
- Animations
Takeaway
- don’t instantiate objects in onDraw() method!!
- clipping is expensive!
- eliminate unnecessary calls to invalidate()
- chain animation properties
- endless possibilities
- it’s fun!
What you can’t do
- create 3D graphics (need to use SurfaceView)
Conclusion
Literature
http://chiuki.github.io/android-shaders-filters/#/
https://engineering.upgrad.com/custom-views-in-android-80da90f7d683
https://medium.com/@britt.barak/layout-once-layout-twice-sold-aef156ff16a4
https://medium.com/@britt.barak/measure-layout-draw-483c6a4d2fab
https://robots.thoughtbot.com/android-interpolators-a-visual-guide
https://android.jlelse.eu/become-an-android-painter-aadf91cec9d4
Literature
https://android-developers.googleblog.com/2011/05/introducing-
viewpropertyanimator.htm
http://blog.danlew.net/2016/07/19/a-deep-dive-into-android-view-constructors/
https://developer.android.com/guide/topics/ui/custom-components.html
https://academy.realm.io/posts/360andev-huyen-tue-dao-measure-layout-
draw-repeat-custom-views-and-viewgroups-android/
https://medium.com/google-developers/draw-what-you-see-and-clip-the-e11-
out-of-the-rest-6df58c47873e
Literature
https://developer.android.com/training/custom-views/create-view.html
https://code.tutsplus.com/tutorials/manipulate-visual-effects-with-the-
colormatrixfilter-and-convolutionfilter--active-3221#comment-45378
https://tech.recruit-mp.co.jp/mobile/remember_canvas2/
https://www.w3.org/TR/SVG/painting.html#FillProperties
https://developer.android.com/guide/topics/resources/animation-resource.html
https://developer.android.com/guide/topics/graphics/prop-
animation.html#object-animator
Images
1. https://2.bp.blogspot.com/-
yFADYUlhdy8/WDPAvFCV0NI/AAAAAAAAnmk/b5-
p6q39_N0bt5eThqtv65yZz4MIg3l8gCLcB/s1600/Crossroads-choice-
dilemma-580x427.jpg
2. http://www.cartoonspot.net/looney-tunes/road-runner-picture.php
Code examples
https://github.com/MatejVukosav/ConceptVie
w
Thank
you

Weitere ähnliche Inhalte

Ähnlich wie Android Custom views

Making it fit - DroidCon Paris 18 june 2013
Making it fit - DroidCon Paris 18 june 2013Making it fit - DroidCon Paris 18 june 2013
Making it fit - DroidCon Paris 18 june 2013Paris Android User Group
 
Android App Development - 04 Views and layouts
Android App Development - 04 Views and layoutsAndroid App Development - 04 Views and layouts
Android App Development - 04 Views and layoutsDiego Grancini
 
Custom UI Components at Android Only 2011
Custom UI Components at Android Only 2011Custom UI Components at Android Only 2011
Custom UI Components at Android Only 2011Johan Nilsson
 
Android development for iOS developers
Android development for iOS developersAndroid development for iOS developers
Android development for iOS developersDarryl Bayliss
 
2013.05.02 android-l1
2013.05.02 android-l12013.05.02 android-l1
2013.05.02 android-l1heath0504
 
Lec005 android start_program
Lec005 android start_programLec005 android start_program
Lec005 android start_programEyad Almasri
 
Day 8: Dealing with Lists and ListViews
Day 8: Dealing with Lists and ListViewsDay 8: Dealing with Lists and ListViews
Day 8: Dealing with Lists and ListViewsAhsanul Karim
 
Sass Essentials at Mobile Camp LA
Sass Essentials at Mobile Camp LASass Essentials at Mobile Camp LA
Sass Essentials at Mobile Camp LAJake Johnson
 
Writing HTML5 Web Apps using Backbone.js and GAE
Writing HTML5 Web Apps using Backbone.js and GAEWriting HTML5 Web Apps using Backbone.js and GAE
Writing HTML5 Web Apps using Backbone.js and GAERon Reiter
 
SenchaCon 2016: Theming the Modern Toolkit - Phil Guerrant
SenchaCon 2016: Theming the Modern Toolkit - Phil Guerrant   SenchaCon 2016: Theming the Modern Toolkit - Phil Guerrant
SenchaCon 2016: Theming the Modern Toolkit - Phil Guerrant Sencha
 
Android Screen Containers & Layouts
Android Screen Containers & LayoutsAndroid Screen Containers & Layouts
Android Screen Containers & LayoutsVijay Rastogi
 
How to Become the MacGyver of Android Custom Views
How to Become the MacGyver of Android Custom ViewsHow to Become the MacGyver of Android Custom Views
How to Become the MacGyver of Android Custom ViewsFernando Cejas
 
07_UIAndroid.pdf
07_UIAndroid.pdf07_UIAndroid.pdf
07_UIAndroid.pdfImranS18
 
View groups containers
View groups containersView groups containers
View groups containersMani Selvaraj
 
Responsive mobile design in practice
Responsive mobile design in practiceResponsive mobile design in practice
Responsive mobile design in practiceKirill Grouchnikov
 
Android Custom Views
Android Custom ViewsAndroid Custom Views
Android Custom ViewsBabar Sanah
 
Accessibility Testing using Axe
Accessibility Testing using AxeAccessibility Testing using Axe
Accessibility Testing using AxeRapidValue
 

Ähnlich wie Android Custom views (20)

Making it fit - DroidCon Paris 18 june 2013
Making it fit - DroidCon Paris 18 june 2013Making it fit - DroidCon Paris 18 june 2013
Making it fit - DroidCon Paris 18 june 2013
 
Android App Development - 04 Views and layouts
Android App Development - 04 Views and layoutsAndroid App Development - 04 Views and layouts
Android App Development - 04 Views and layouts
 
Custom UI Components at Android Only 2011
Custom UI Components at Android Only 2011Custom UI Components at Android Only 2011
Custom UI Components at Android Only 2011
 
Android development for iOS developers
Android development for iOS developersAndroid development for iOS developers
Android development for iOS developers
 
Custom components
Custom componentsCustom components
Custom components
 
2013.05.02 android-l1
2013.05.02 android-l12013.05.02 android-l1
2013.05.02 android-l1
 
Lec005 android start_program
Lec005 android start_programLec005 android start_program
Lec005 android start_program
 
Day 8: Dealing with Lists and ListViews
Day 8: Dealing with Lists and ListViewsDay 8: Dealing with Lists and ListViews
Day 8: Dealing with Lists and ListViews
 
Hello Android
Hello AndroidHello Android
Hello Android
 
Actionview
ActionviewActionview
Actionview
 
Sass Essentials at Mobile Camp LA
Sass Essentials at Mobile Camp LASass Essentials at Mobile Camp LA
Sass Essentials at Mobile Camp LA
 
Writing HTML5 Web Apps using Backbone.js and GAE
Writing HTML5 Web Apps using Backbone.js and GAEWriting HTML5 Web Apps using Backbone.js and GAE
Writing HTML5 Web Apps using Backbone.js and GAE
 
SenchaCon 2016: Theming the Modern Toolkit - Phil Guerrant
SenchaCon 2016: Theming the Modern Toolkit - Phil Guerrant   SenchaCon 2016: Theming the Modern Toolkit - Phil Guerrant
SenchaCon 2016: Theming the Modern Toolkit - Phil Guerrant
 
Android Screen Containers & Layouts
Android Screen Containers & LayoutsAndroid Screen Containers & Layouts
Android Screen Containers & Layouts
 
How to Become the MacGyver of Android Custom Views
How to Become the MacGyver of Android Custom ViewsHow to Become the MacGyver of Android Custom Views
How to Become the MacGyver of Android Custom Views
 
07_UIAndroid.pdf
07_UIAndroid.pdf07_UIAndroid.pdf
07_UIAndroid.pdf
 
View groups containers
View groups containersView groups containers
View groups containers
 
Responsive mobile design in practice
Responsive mobile design in practiceResponsive mobile design in practice
Responsive mobile design in practice
 
Android Custom Views
Android Custom ViewsAndroid Custom Views
Android Custom Views
 
Accessibility Testing using Axe
Accessibility Testing using AxeAccessibility Testing using Axe
Accessibility Testing using Axe
 

Kürzlich hochgeladen

Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Cizo Technology Services
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprisepreethippts
 
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfInnovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfYashikaSharma391629
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commercemanigoyal112
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based projectAnoyGreter
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsSafe Software
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecturerahul_net
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringHironori Washizaki
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalLionel Briand
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Angel Borroy López
 
Xen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfXen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfStefano Stabellini
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanyChristoph Pohl
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsChristian Birchler
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf31events.com
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceBrainSell Technologies
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfMarharyta Nedzelska
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLionel Briand
 

Kürzlich hochgeladen (20)

Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
Global Identity Enrolment and Verification Pro Solution - Cizo Technology Ser...
 
2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprise
 
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdfInnovate and Collaborate- Harnessing the Power of Open Source Software.pdf
Innovate and Collaborate- Harnessing the Power of Open Source Software.pdf
 
Cyber security and its impact on E commerce
Cyber security and its impact on E commerceCyber security and its impact on E commerce
Cyber security and its impact on E commerce
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based project
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
 
Understanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM ArchitectureUnderstanding Flamingo - DeepMind's VLM Architecture
Understanding Flamingo - DeepMind's VLM Architecture
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their Engineering
 
Precise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive GoalPrecise and Complete Requirements? An Elusive Goal
Precise and Complete Requirements? An Elusive Goal
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
 
Xen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfXen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdf
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
 
Advantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your BusinessAdvantages of Odoo ERP 17 for Your Business
Advantages of Odoo ERP 17 for Your Business
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. Salesforce
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdf
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
 

Android Custom views