+ All Categories
Home > Technology > "Как я перестал бояться и полюбил кастомные View" —...

"Как я перестал бояться и полюбил кастомные View" —...

Date post: 08-Jul-2015
Category:
Upload: yandex
View: 2,177 times
Download: 1 times
Share this document with a friend
Description:
Сейчас в Google Play более миллиона приложений, и чтобы привлечь внимание людей, нужно обязательно выделяться на общем фоне. Ещё пару лет назад пользователи Android были не слишком привередливы в том, что касается элементов интерфейса приложений, но сейчас они всё больше привыкают к прекрасному. Этот доклад — небольшой путеводитель в мир этому самого прекрасного. После него, я надеюсь, вы полюбите кастомные View не меньше чем я.
Popular Tags:
53
1
Transcript
Page 1: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

1

Page 2: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

2

Page 3: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

3

Page 4: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

4

ViewGroups

! FrameLayout

! LinearLayout

! RelativeLayout

Page 5: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

5

Page 6: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

6

View positioning

Page 7: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

7

View positioning

! onMeasure

! onLayout

Page 8: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

8

onMeasure

Page 9: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

9

MeasureSpec

!  Mode

–  EXACTLY –  AT_MOST –  UNSPECIFIED !  Size

Page 10: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

10

MeasureSpec modes

!  EXACTLY

–  layout_width=“200dip” –  layout_height=“match_parent” –  layout_weight=“1”

Page 11: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

11

MeasureSpec modes

!  AT_MOST

–  layout_width=“wrap_content”

Page 12: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

12

MeasureSpec modes

!  UNSPECIFIED

–  ScrollView, ListView

Page 13: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

13

onMeasure

Page 14: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

14

onLayout

! getMeasuredWidth()

! getMeasuredHeight()

!  сhild.layout(left, top, right, bottom);

Page 15: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

15

–  How?

Page 16: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

16

–  How?

–  LayoutParams!

Page 17: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

17

attrs.xml

Page 18: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

18

main.xml

Page 19: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

19

LayoutParams

! ViewGroup.LayoutParams

! LinearLayout.LayoutParams

! RelativeLayout.LayoutParams

!  …

Page 20: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

20

LayoutParams

! checkLayoutParams(ViewGroup.LayoutParams p)

! generateDefaultLayoutParams()

! generateLayoutParams(ViewGroup.LayoutParams p);

! generateLayoutParams(AttributeSet attrs)

Page 21: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

21

PavementLayout.LayoutParams

Page 22: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

22

onMeasure

Page 23: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

23

Page 24: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

24

View interactions

Page 25: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

25

Yandex.Maps search card

Motion directions !  Up !  Left & right !  Down

Page 26: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

26

Yandex.Maps search card heirarchy

CardSlidingDrawer

ViewPager

Card

Page 27: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

27

Touch events

1.  dispatchTouchEvent

2.  onInterceptTouchEvent

3.  children.dispatchTouchEvent

4.  onTouchEvent

Page 28: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

28

Touch events sample #1

CardSlidingDrawer

TextView

Page 29: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

29

Touch events sample #1

1.  dispatchTouchEvent CardSlidingDrawer

TextView

Page 30: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

30

Touch events sample #1

1.  dispatchTouchEvent

2.  onInterceptTouchEvent

CardSlidingDrawer

TextView

Page 31: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

31

Touch events sample #1

1.  dispatchTouchEvent

2.  onInterceptTouchEvent

3.  dispatchTouchEvent

CardSlidingDrawer

TextView

Page 32: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

32

Touch events sample #1

1.  dispatchTouchEvent

2.  onInterceptTouchEvent

3.  dispatchTouchEvent

4.  onTouchEvent

CardSlidingDrawer

TextView

Page 33: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

33

Touch events sample #1

1.  dispatchTouchEvent

2.  onInterceptTouchEvent

3.  dispatchTouchEvent

4.  onTouchEvent

CardSlidingDrawer

TextView

Page 34: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

34

Touch events sample #1

1.  dispatchTouchEvent

2.  onInterceptTouchEvent

3.  dispatchTouchEvent

4.  onTouchEvent

CardSlidingDrawer

TextView

Page 35: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

35

Touch events sample #2

1.  dispatchTouchEvent CardSlidingDrawer

Clickable TextView

Page 36: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

36

Touch events sample #2

1.  dispatchTouchEvent

2.  onInterceptTouchEvent

CardSlidingDrawer

Clickable TextView

Page 37: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

37

Touch events sample #2

1.  dispatchTouchEvent

2.  onInterceptTouchEvent

3.  dispatchTouchEvent

CardSlidingDrawer

Clickable TextView

Page 38: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

38

Touch events sample #2

1.  dispatchTouchEvent

2.  onInterceptTouchEvent

3.  dispatchTouchEvent

CardSlidingDrawer

Clickable TextView

Page 39: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

39

Touch events sample #2

1.  dispatchTouchEvent

2.  onInterceptTouchEvent

3.  dispatchTouchEvent

CardSlidingDrawer

Clickable TextView

Page 40: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

40

Touch events sample #2

1.  dispatchTouchEvent

2.  onInterceptTouchEvent

3.  dispatchTouchEvent

CardSlidingDrawer

Clickable TextView

Page 41: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

41

Touch events sample #2

1.  dispatchTouchEvent

2.  onInterceptTouchEvent

3.  dispatchTouchEvent

CardSlidingDrawer

Clickable TextView

Page 42: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

42

Touch events sample #2

1.  dispatchTouchEvent

2.  onInterceptTouchEvent

3.  dispatchTouchEvent

CardSlidingDrawer

Clickable TextView

Page 43: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

43

Touch events sample #2

1.  dispatchTouchEvent

2.  onInterceptTouchEvent

3.  dispatchTouchEvent

4.  onTouchEvent

CardSlidingDrawer

Clickable TextView

Page 44: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

44

Touch events sample #2

1.  dispatchTouchEvent

2.  onInterceptTouchEvent

3.  dispatchTouchEvent

4.  onTouchEvent

CardSlidingDrawer

Clickable TextView

Page 45: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

45

Touch events sample #2

1.  dispatchTouchEvent

2.  onInterceptTouchEvent

3.  dispatchTouchEvent

4.  onTouchEvent

CardSlidingDrawer

Clickable TextView

Page 46: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

46

TouchSlop

! deltaY = Math.abs( event.getY() – startY );

! ViewConfiguration.getScaledTouchSlop();

! view.scrollTo(x,y);

Page 47: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

47

VelocityTracker

! VelocityTracker.obtain();

! VelocityTracker.addMovement( event );

! VelocityTracker.computeCurrentVelocity(units);

Page 48: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

48

Scroller

!  void fling(…);

!  void View.computeScroll();

! boolean computeScrollOffset();

! int getCurrY();

Page 49: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

49

Scroller

Page 50: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

50

Wrap-up

! onMeasure & onLayout

! onIntercept & onTouchEvent

! GestureDetector & DragHelper

Page 51: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

51

Samples

https://github.com/ArikonUA/yac13

Page 52: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

52

Спасибо за внимание

Page 53: "Как я перестал бояться и полюбил кастомные View" — Алексей Поляков, Яндекс

53

Поляков Алексей Разработчик

[email protected]

!   @arikon


Recommended