1page.title=그림자 정의 및 뷰 클리핑
2
3@jd:body
4
5<div id="tb-wrapper">
6<div id="tb">
7<h2>이 과정에서 다루는 내용</h2>
8<ol>
9  <li><a href="#Elevation">뷰에 엘리베이션 지정</a></li>
10  <li><a href="#Shadows">뷰 그림자 및 윤곽선 사용자지정</a></li>
11  <li><a href="#Clip">뷰 클리핑</a></li>
12</ol>
13<h2>필독 항목</h2>
14<ul>
15  <li><a href="http://www.google.com/design/spec">머티리얼 디자인 사양</a></li>
16  <li><a href="{@docRoot}design/material/index.html">Android의 머티리얼 디자인</a></li>
17</ul>
18</div>
19</div>
20
21<p>머티어리얼 디자인은 UI 요소에 엘리베이션을 도입합니다. 엘리베이션은 사용자가 각 요소의 상대적 중요성을 이해하고 현재 직면한 작업에 집중할 수 있도록 도와줍니다.
22</p>
23
24<p>Z 속성으로 표현되는 뷰의 엘리베이션은 그림자의 시각적인 모양을 결정합니다. 예를 들어, 더 높은 Z값을 가진 뷰는 더 크고 부드러운 그림자를 드리웁니다.
25 높은 Z값을 가진 뷰는 낮은 Z값을 가진 뷰를 가립니다. 하지만 뷰의 Z값이 뷰의 크기에 영향을 주지는 않습니다.
26</p>
27
28<p>그림자는 엘리베이트된 뷰의 상위 요소에 의해 그려지며, 따라서 기본적으로 상위 요소에 의해 클리핑되는 표준 뷰 클리핑이 적용됩니다.
29</p>
30
31<p>엘리베이션은 특정 작업 수행 시 위젯이 일시적으로 뷰 평면 위로 올라오는 애니메이션을 생성하는 경우에도 유용합니다.
32</p>
33
34<p>머티리얼 디자인의 엘리베이션에 대한 자세한 내용은
35<a href="http://www.google.com/design/spec/what-is-material/objects-in-3d-space.html">3D 공간의 개체</a>를 참조하세요.
36</p>
37
38
39<h2 id="Elevation">뷰에 엘리베이션 지정</h2>
40
41<p>뷰의 Z 값은 2개의 구성요소를 가집니다.
42
43<ul>
44<li>엘리베이션: 정적 구성요소.</li>
45<li>변환: 애니메이션에 사용되는 동적 구성요소.</li>
46</ul>
47
48<p><code>Z = elevation + translationZ</code></p>
49
50<img src="{@docRoot}training/material/images/shadows-depth.png" width="580" height="261" alt="" />
51<p class="img-caption"><strong>그림 1</strong> - 서로 다른 뷰 엘리베이션의 그림자.</p>
52
53<p>레이아웃 정의에서 뷰의 엘리베이션을 설정하려면 <code>android:elevation</code>
54특성을 사용합니다. 액티비티의 코드에서 뷰의 엘리베이션을 설정하려면
55{@link android.view.View#setElevation View.setElevation()} 메서드를 사용합니다.</p>
56
57<p>뷰의 변환을 설정하려면 {@link android.view.View#setTranslationZ
58View.setTranslationZ()} 메서드를 사용합니다.</p>
59
60<p>새 {@link android.view.ViewPropertyAnimator#z ViewPropertyAnimator.z()} 및 {@link
61android.view.ViewPropertyAnimator#translationZ ViewPropertyAnimator.translationZ()} 메서드를 사용하면 뷰의 엘리베이션을 손쉽게 애니메이트할 수 있습니다.
62 자세한 내용은
63{@link android.view.ViewPropertyAnimator}의 API 레퍼런스와 <a href="{@docRoot}guide/topics/graphics/prop-animation.html">속성 애니메이션</a> 개발자 가이드를 참조하세요.
64</p>
65
66<p>{@link android.animation.StateListAnimator}를 사용해서 이러한 애니메이션을 선언적 방식으로 지정할 수도 있습니다.
67 이는 사용자가 버튼을 누를 때와 같이 상태 변경이 애니메이션을 트리거하는 경우에 특히 유용합니다.
68 자세한 내용은
69<a href="{@docRoot}training/material/animations.html#ViewState">뷰 상태 변경 애니메이트</a>를 참조하세요.</p>
70
71<p>Z 값은 dp(밀도 독립적 픽셀)로 측정됩니다.</p>
72
73
74<h2 id="Shadows">뷰 그림자 및 윤곽선 사용자지정</h2>
75
76<p>뷰의 배경 드로어블의 경계는 해당 그림자의 기본 모양을 결정합니다.
77<strong>윤곽선</strong>은 그래픽 객체의 바깥쪽 모양을 나타내고 터치 피드백의 물결 영역을 정의합니다.
78</p>
79
80<p>배경 드로어블을 사용하여 정의된 다음 뷰를 살펴봅시다.</p>
81
82<pre>
83&lt;TextView
84    android:id="@+id/myview"
85    ...
86    android:elevation="2dp"
87    android:background="@drawable/myrect" />
88</pre>
89
90<p>배경 드로어블은 둥근 모서리를 가진 직사각형으로 정의됩니다.</p>
91
92<pre>
93&lt;!-- res/drawable/myrect.xml -->
94&lt;shape xmlns:android="http://schemas.android.com/apk/res/android"
95       android:shape="rectangle">
96    &lt;solid android:color="#42000000" />
97    &lt;corners android:radius="5dp" />
98&lt;/shape>
99</pre>
100
101<p>배경 드로어블이 뷰의 윤곽선을 정의하기 때문에 뷰는 둥근 모서리를 가진 그림자를 드리웁니다.
102 사용자지정 윤곽선을 제공하면 뷰 그림자의 기본 모양이 재정의됩니다.</p>
103
104<p>코드에서 뷰의 사용자지정 윤곽선을 정의하려면:<p>
105
106<ol>
107<li>{@link android.view.ViewOutlineProvider} 클래스를 확장합니다.</li>
108<li>{@link android.view.ViewOutlineProvider#getOutline getOutline()} 메서드를 재정의합니다.</li>
109<li>{@link
110android.view.View#setOutlineProvider View.setOutlineProvider()} 메서드를 사용하여 새로운 윤곽선 공급자를 뷰에 할당합니다.</li>
111</ol>
112
113<p>{@link android.graphics.Outline} 클래스의 메서드를 사용하여 둥근 모서리를 가진 타원형 및 직사각형 윤곽선을 생성할 수 있습니다.
114 뷰의 기본 윤곽선 공급자는 뷰의 배경에서 윤곽선을 가져옵니다.
115 뷰에 그림자가 드리우는 것을 원치 않으면 뷰의 윤곽선 공급자를 <code>null</code>로 설정하세요.
116</p>
117
118
119<h2 id="Clip">뷰 클리핑</h2>
120
121<p>뷰를 클리핑하면 뷰의 모양을 손쉽게 바꿀 수 있습니다. 다른 디자인 요소와의 일관성을 위해, 또는 사용자 입력에 응답하여 뷰의 모양을 바꾸기 위해 뷰를 클리핑할 수 있습니다. {@link android.view.View#setClipToOutline
122View.setClipToOutline()} 메서드나 <code>android:clipToOutline</code> 특성을 사용하여 뷰를 해당 윤곽선 영역까지 클리핑할 수 있습니다.
123
124
125{@link android.graphics.Outline#canClip Outline.canClip()} 메서드에서 결정된 대로 사각형, 원형 및 둥근 사각형의 윤곽선만 클리핑을 지원합니다.
126</p>
127
128<p>드로어블 모양으로 뷰를 클리핑하려면 위와 같이 드로어블을 뷰의 배경으로
129설정하고 {@link android.view.View#setClipToOutline View.setClipToOutline()}
130메서드를 호출합니다.</p>
131
132<p>뷰 클리핑은 리소스 소모가 많은 작업이므로,뷰를 클리핑하는 데 사용하는 모양을 애니메이트하지 마세요.
133 이 효과를 얻으려면 <a href="{@docRoot}training/material/animations.html#Reveal">표시 효과</a> 애니메이션을 사용하세요.</p>
134