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