"Как я перестал бояться и полюбил кастомные View" —...
-
Upload
yandex -
Category
Technology
-
view
2.193 -
download
1
description
Transcript of "Как я перестал бояться и полюбил кастомные View" —...
![Page 1: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/1.jpg)
1
![Page 2: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/2.jpg)
2
![Page 3: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/3.jpg)
3
![Page 4: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/4.jpg)
4
ViewGroups
! FrameLayout
! LinearLayout
! RelativeLayout
![Page 5: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/5.jpg)
5
![Page 6: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/6.jpg)
6
View positioning
![Page 7: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/7.jpg)
7
View positioning
! onMeasure
! onLayout
![Page 8: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/8.jpg)
8
onMeasure
![Page 9: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/9.jpg)
9
MeasureSpec
! Mode
– EXACTLY – AT_MOST – UNSPECIFIED ! Size
![Page 10: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/10.jpg)
10
MeasureSpec modes
! EXACTLY
– layout_width=“200dip” – layout_height=“match_parent” – layout_weight=“1”
![Page 11: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/11.jpg)
11
MeasureSpec modes
! AT_MOST
– layout_width=“wrap_content”
![Page 12: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/12.jpg)
12
MeasureSpec modes
! UNSPECIFIED
– ScrollView, ListView
![Page 13: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/13.jpg)
13
onMeasure
![Page 14: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/14.jpg)
14
onLayout
! getMeasuredWidth()
! getMeasuredHeight()
! сhild.layout(left, top, right, bottom);
![Page 15: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/15.jpg)
15
– How?
![Page 16: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/16.jpg)
16
– How?
– LayoutParams!
![Page 17: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/17.jpg)
17
attrs.xml
![Page 18: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/18.jpg)
18
main.xml
![Page 19: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/19.jpg)
19
LayoutParams
! ViewGroup.LayoutParams
! LinearLayout.LayoutParams
! RelativeLayout.LayoutParams
! …
![Page 20: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/20.jpg)
20
LayoutParams
! checkLayoutParams(ViewGroup.LayoutParams p)
! generateDefaultLayoutParams()
! generateLayoutParams(ViewGroup.LayoutParams p);
! generateLayoutParams(AttributeSet attrs)
![Page 21: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/21.jpg)
21
PavementLayout.LayoutParams
![Page 22: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/22.jpg)
22
onMeasure
![Page 23: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/23.jpg)
23
![Page 24: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/24.jpg)
24
View interactions
![Page 25: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/25.jpg)
25
Yandex.Maps search card
Motion directions ! Up ! Left & right ! Down
![Page 26: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/26.jpg)
26
Yandex.Maps search card heirarchy
CardSlidingDrawer
ViewPager
Card
![Page 27: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/27.jpg)
27
Touch events
1. dispatchTouchEvent
2. onInterceptTouchEvent
3. children.dispatchTouchEvent
4. onTouchEvent
![Page 28: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/28.jpg)
28
Touch events sample #1
CardSlidingDrawer
TextView
![Page 29: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/29.jpg)
29
Touch events sample #1
1. dispatchTouchEvent CardSlidingDrawer
TextView
![Page 30: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/30.jpg)
30
Touch events sample #1
1. dispatchTouchEvent
2. onInterceptTouchEvent
CardSlidingDrawer
TextView
![Page 31: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/31.jpg)
31
Touch events sample #1
1. dispatchTouchEvent
2. onInterceptTouchEvent
3. dispatchTouchEvent
CardSlidingDrawer
TextView
![Page 32: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/32.jpg)
32
Touch events sample #1
1. dispatchTouchEvent
2. onInterceptTouchEvent
3. dispatchTouchEvent
4. onTouchEvent
CardSlidingDrawer
TextView
![Page 33: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/33.jpg)
33
Touch events sample #1
1. dispatchTouchEvent
2. onInterceptTouchEvent
3. dispatchTouchEvent
4. onTouchEvent
CardSlidingDrawer
TextView
![Page 34: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/34.jpg)
34
Touch events sample #1
1. dispatchTouchEvent
2. onInterceptTouchEvent
3. dispatchTouchEvent
4. onTouchEvent
CardSlidingDrawer
TextView
![Page 35: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/35.jpg)
35
Touch events sample #2
1. dispatchTouchEvent CardSlidingDrawer
Clickable TextView
![Page 36: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/36.jpg)
36
Touch events sample #2
1. dispatchTouchEvent
2. onInterceptTouchEvent
CardSlidingDrawer
Clickable TextView
![Page 37: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/37.jpg)
37
Touch events sample #2
1. dispatchTouchEvent
2. onInterceptTouchEvent
3. dispatchTouchEvent
CardSlidingDrawer
Clickable TextView
![Page 38: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/38.jpg)
38
Touch events sample #2
1. dispatchTouchEvent
2. onInterceptTouchEvent
3. dispatchTouchEvent
CardSlidingDrawer
Clickable TextView
![Page 39: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/39.jpg)
39
Touch events sample #2
1. dispatchTouchEvent
2. onInterceptTouchEvent
3. dispatchTouchEvent
CardSlidingDrawer
Clickable TextView
![Page 40: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/40.jpg)
40
Touch events sample #2
1. dispatchTouchEvent
2. onInterceptTouchEvent
3. dispatchTouchEvent
CardSlidingDrawer
Clickable TextView
![Page 41: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/41.jpg)
41
Touch events sample #2
1. dispatchTouchEvent
2. onInterceptTouchEvent
3. dispatchTouchEvent
CardSlidingDrawer
Clickable TextView
![Page 42: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/42.jpg)
42
Touch events sample #2
1. dispatchTouchEvent
2. onInterceptTouchEvent
3. dispatchTouchEvent
CardSlidingDrawer
Clickable TextView
![Page 43: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/43.jpg)
43
Touch events sample #2
1. dispatchTouchEvent
2. onInterceptTouchEvent
3. dispatchTouchEvent
4. onTouchEvent
CardSlidingDrawer
Clickable TextView
![Page 44: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/44.jpg)
44
Touch events sample #2
1. dispatchTouchEvent
2. onInterceptTouchEvent
3. dispatchTouchEvent
4. onTouchEvent
CardSlidingDrawer
Clickable TextView
![Page 45: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/45.jpg)
45
Touch events sample #2
1. dispatchTouchEvent
2. onInterceptTouchEvent
3. dispatchTouchEvent
4. onTouchEvent
CardSlidingDrawer
Clickable TextView
![Page 46: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/46.jpg)
46
TouchSlop
! deltaY = Math.abs( event.getY() – startY );
! ViewConfiguration.getScaledTouchSlop();
! view.scrollTo(x,y);
![Page 47: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/47.jpg)
47
VelocityTracker
! VelocityTracker.obtain();
! VelocityTracker.addMovement( event );
! VelocityTracker.computeCurrentVelocity(units);
![Page 48: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/48.jpg)
48
Scroller
! void fling(…);
! void View.computeScroll();
! boolean computeScrollOffset();
! int getCurrY();
![Page 49: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/49.jpg)
49
Scroller
![Page 50: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/50.jpg)
50
Wrap-up
! onMeasure & onLayout
! onIntercept & onTouchEvent
! GestureDetector & DragHelper
![Page 51: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/51.jpg)
51
Samples
https://github.com/ArikonUA/yac13
![Page 52: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс](https://reader031.fdocuments.in/reader031/viewer/2022013105/559c57911a28ab02588b4591/html5/thumbnails/52.jpg)
52
Спасибо за внимание