<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>숲속의 작은 이야기</title>
    <link>https://re-build.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Fri, 19 Jun 2026 12:55:19 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>여름숲_</managingEditor>
    <image>
      <title>숲속의 작은 이야기</title>
      <url>https://tistory1.daumcdn.net/tistory/2762154/attach/a1b3268e405a44808ba4c1cf27339e5f</url>
      <link>https://re-build.tistory.com</link>
    </image>
    <item>
      <title>[Android] Shared Elements Transition</title>
      <link>https://re-build.tistory.com/43</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 포스팅은 Shared Elements Transition에 대한 내용입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;거두절미 하고 바로 시작하도록 하겠습니다.!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class=&quot;&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;&lt;b&gt;Shared Elements Transition?&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에는 화면 전환 시에 좌우로 넘겨지는 듯한 효과나 Fade 효과를 이용하는 방법들이 대부분이었는데요, 오늘은 조금 다른 효과에 대해 얘기하려 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선, 결과물을 먼저 볼까요?&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;311&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://t1.daumcdn.net/cfile/tistory/99C7973B5C4EC07F0A?original&quot; data-phocus=&quot;https://t1.daumcdn.net/cfile/tistory/99C7973B5C4EC07F0A?original&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99C7973B5C4EC07F0A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99C7973B5C4EC07F0A&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;311&quot; height=&quot;640&quot; data-origin-width=&quot;311&quot; data-origin-height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;Shared Elements Transition&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보이시나요? 사용자에 의해 선택 된 이미지가 다음 화면까지 연결되어 보여지고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네 바로 오늘 주제인 Shared Elements Transition의 효과인데요, 이렇듯 화면 간에 공유 되는 요소들에 의해서 좀 더 직관적이고 부드러운&amp;nbsp;연출이 가능해졌습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 예제는&amp;nbsp;지난 포스트의 예제를 이용하여 진행하도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;RecyclerView 사용하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a class=&quot;tx-link&quot; href=&quot;https://re-build.tistory.com/42&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://re-build.tistory.com/42&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class=&quot;&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;&lt;b&gt;TransitionName 지정하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저, 화면 간의 &lt;span style=&quot;background-color: #ffd8d8;&quot;&gt;공유에 사용 할 요소에 transitionName을 지정&lt;/span&gt;해주어야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;custom_album_item.xml&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;lt;&lt;span style=&quot;color: #980000;&quot;&gt;?&lt;/span&gt;xml version=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;1.0&quot;&lt;/span&gt;&amp;nbsp;encoding=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span style=&quot;color: #980000;&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #980000;&quot;&gt;&amp;lt;LinearLayout&lt;/span&gt;&amp;nbsp;xmlns:android=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;http://schemas.android.com/apk/res/android&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; android:id=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;@+id/layout_album_panel&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; android:orientation=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;vertical&quot;&lt;/span&gt;&lt;span style=&quot;color: #980000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #980000;&quot;&gt;&amp;lt;ImageView&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:id=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;@+id/img_thumb&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;150dp&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:scaleType=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;centerCrop&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;android:transitionName=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;pair_thumb&quot;&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;span style=&quot;color: #980000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #980000;&quot;&gt;&amp;lt;LinearLayout&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:orientation=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;vertical&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:paddingBottom=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;5dp&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:paddingTop=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;5dp&quot;&lt;/span&gt;&lt;span style=&quot;color: #980000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #980000;&quot;&gt;&amp;lt;TextView&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:id=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;@+id/txt_title&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:textColor=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;#ffffff&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:textSize=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;16dp&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #980000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #980000;&quot;&gt;&amp;lt;TextView&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:id=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;@+id/txt_artist&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:textColor=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;#8e8e8e&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:textSize=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;14dp&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #980000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #980000;&quot;&gt;&amp;lt;/LinearLayout&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;clear: none; float: none;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #980000;&quot;&gt;&amp;lt;/LinearLayout&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이어서 화면 전환에 후에 보여질 레이아웃을 꾸며 보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;activity_detail.xml&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #980000;&quot;&gt;&amp;lt;?&lt;/span&gt;xml version=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;1.0&quot;&lt;/span&gt; encoding=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span style=&quot;color: #980000;&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #980000;&quot;&gt;&amp;lt;ScrollView&lt;/span&gt;&amp;nbsp;xmlns:android=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;http://schemas.android.com/apk/res/android&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; xmlns:app=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;http://schemas.android.com/apk/res-auto&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; xmlns:tools=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;http://schemas.android.com/tools&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; android:background=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;#000000&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; android:overScrollMode=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;never&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; tools:context=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;rebuild.com.SharedElementsTransitions.Activity.DetailActivity&quot;&lt;/span&gt;&lt;span style=&quot;color: #980000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;&amp;lt;LinearLayout&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:gravity=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;center_horizontal&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:orientation=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;vertical&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:paddingLeft=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;26dp&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:paddingRight=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;26dp&quot;&lt;/span&gt;&lt;span style=&quot;color: #980000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;&amp;lt;ImageView&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:id=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;@+id/btn_back&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;24dp&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;24dp&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_gravity=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;left&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_marginTop=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;20dp&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:src=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;@drawable/ic_back&quot;&lt;/span&gt; &lt;span style=&quot;color: #980000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;&amp;lt;ImageView&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:id=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;@+id/img_thumb&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;250dp&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;250dp&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_marginTop=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;20dp&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:scaleType=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;centerCrop&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;android:transitionName=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;pair_thumb&quot;&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #980000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;&amp;lt;TextView&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:id=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;@+id/txt_title&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_marginTop=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;16dp&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:textColor=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;#8e8e8e&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:textSize=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;22dp&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:textStyle=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;bold&quot;&lt;/span&gt; &lt;span style=&quot;color: #980000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;&amp;lt;TextView&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:id=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;@+id/txt_artist&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:textColor=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;#ffffff&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:textSize=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;16dp&quot;&lt;/span&gt; &lt;span style=&quot;color: #980000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;&amp;lt;LinearLayout&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_marginTop=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;5dp&quot;&lt;/span&gt;&lt;span style=&quot;color: #980000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;&amp;lt;TextView&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:id=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;@+id/txt_date&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:textColor=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;#8e8e8e&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:textSize=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;13dp&quot;&lt;/span&gt; &lt;span style=&quot;color: #980000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;&amp;lt;TextView&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:id=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;@+id/txt_type&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_marginLeft=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;5dp&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:textColor=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;#8e8e8e&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:textSize=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;13dp&quot;&lt;/span&gt; &lt;span style=&quot;color: #980000;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;&amp;lt;/LinearLayout&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;&amp;lt;TextView&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:id=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;@+id/txt_introduce&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_gravity=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;left&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_marginTop=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;20dp&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:textColor=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;#8e8e8e&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:textSize=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;13dp&quot;&lt;/span&gt;&lt;span style=&quot;color: #980000;&quot;&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;&amp;lt;RelativeLayout&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;span style=&quot;color: #980000;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;&amp;lt;android.support.v7.widget.RecyclerView&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:id=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;@+id/rcc_song&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_marginBottom=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;20dp&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_marginTop=&lt;span style=&quot;color: #003399;&quot;&gt;&quot;20dp&quot;&lt;/span&gt;&lt;span style=&quot;color: #980000;&quot;&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;&amp;lt;/RelativeLayout&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #980000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/LinearLayout&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #980000;&quot;&gt;&amp;lt;/ScrollView&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작성 시에 주의 하실 점은 &lt;span style=&quot;background-color: #ffd8d8;&quot;&gt;공유 되는 요소 간의 transitionName은 동일한 이름으로 지정&lt;/span&gt;하셔야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote class=&quot;&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;&lt;b&gt;Shared Elements Transition 사용하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 화면 전환 시에 공유되는 요소들에 어떻게 애니메이션을 적용하는지 살펴보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MainActivity.java&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #980000;&quot;&gt;public &lt;/span&gt;&lt;span style=&quot;color: #980000;&quot;&gt;class&lt;/span&gt; MainActivity &lt;span style=&quot;color: #980000;&quot;&gt;extends &lt;/span&gt;AppCompatActivity &lt;span style=&quot;color: #980000;&quot;&gt;implements &lt;/span&gt;AlbumAdapter.OnItemClickListener {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; @Override&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;public &lt;/span&gt;&lt;span style=&quot;color: #980000;&quot;&gt;void &lt;/span&gt;&lt;span style=&quot;color: #f15f5f;&quot;&gt;onItemClick&lt;/span&gt;(View view, AlbumVO albumVO) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Intent intent = &lt;span style=&quot;color: #980000;&quot;&gt;new &lt;/span&gt;Intent(MainActivity.&lt;span style=&quot;color: #980000;&quot;&gt;this&lt;/span&gt;, DetailActivity.&lt;span style=&quot;color: #980000;&quot;&gt;class&lt;/span&gt;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; intent.putExtra(&lt;span style=&quot;color: #003399;&quot;&gt;&quot;albumVO&quot;&lt;/span&gt;, albumVO);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; View thumbView = view.findViewById(R.id.img_thumb);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;Pair&amp;lt;View, String&amp;gt; pair_thumb = Pair.create(thumbView, thumbView.getTransitionName());&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ActivityOptionsCompat optionsCompat =&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;ActivityOptionsCompat.makeSceneTransitionAnimation(MainActivity.&lt;span style=&quot;color: #980000;&quot;&gt;this&lt;/span&gt;, pair_thumb);&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; startActivity(intent, optionsCompat.toBundle());&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전달 받은 View와 앞서 지정했던 transitionName을 묶어 Pair 라는 클래스에 담았습니다. 여기서 &lt;span style=&quot;background-color: #ffd8d8;&quot;&gt;Pair&amp;lt;F, S&amp;gt;는 데이터를 좀 더 쉽게 전달하기 위한 컨테이너의 역할&lt;/span&gt;을 한다고 보시면 되겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이어서, ActionOptionsCompat의 &lt;span style=&quot;background-color: #ffd8d8;&quot;&gt;makeSceneTransitionAnimation(Activity, Pair&lt;/span&gt;&lt;span style=&quot;background-color: #ffd8d8;&quot;&gt;&amp;lt;F, S&amp;gt; ... SharedElements&lt;/span&gt;&lt;span style=&quot;background-color: #ffd8d8;&quot;&gt;)를 통해 애니메이션을 생성&lt;/span&gt;하였는데요, 예제에서는 ImageView에 대해서만 지정 하였지만, 여러개의 Pair를 생성하여 등록하셔도 무방합니다. 단! 너무 많은 사용은 오히려 앱이 조잡해 보일 수 있으니 적당히 사용하시길 권장드립니다. 과유불급.!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 이제, 전환 된 Activity에서 넘겨 받은 데이터를 세팅하고 반대로 다시 이전의 Activity로 돌아올 때의 애니메이션 효과 또한 적용해 보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;DetailActivity.java&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #980000;&quot;&gt;public &lt;/span&gt;&lt;span style=&quot;color: #980000;&quot;&gt;class &lt;/span&gt;DetailActivity &lt;span style=&quot;color: #980000;&quot;&gt;extends &lt;/span&gt;AppCompatActivity &lt;span style=&quot;color: #980000;&quot;&gt;implements&lt;/span&gt; View.OnClickListener {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;private &lt;/span&gt;Context mContext;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;private &lt;/span&gt;AlbumVO albumVO;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;private &lt;/span&gt;ImageView btn_back;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;private &lt;/span&gt;ImageView img_thumb;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;private &lt;/span&gt;TextView txt_title;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;private &lt;/span&gt;TextView txt_artist;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;private &lt;/span&gt;TextView txt_date;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;private &lt;/span&gt;TextView txt_type;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;private &lt;/span&gt;TextView txt_introduce;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;private &lt;/span&gt;RecyclerView rcc_song;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;@Override&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #980000;&quot;&gt;void &lt;/span&gt;&lt;span style=&quot;color: #f15f5f;&quot;&gt;onEnterAnimationComplete&lt;/span&gt;() {&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;super&lt;/span&gt;.onEnterAnimationComplete();&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setInit();&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; }&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; @Override&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;protected &lt;/span&gt;&lt;span style=&quot;color: #980000;&quot;&gt;void &lt;/span&gt;&lt;span style=&quot;color: #f15f5f;&quot;&gt;onCreate&lt;/span&gt;(Bundle savedInstanceState) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;super&lt;/span&gt;.onCreate(savedInstanceState);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setContentView(R.layout.activity_detail);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mContext = &lt;span style=&quot;color: #980000;&quot;&gt;this&lt;/span&gt;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; getData();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;private &lt;/span&gt;&lt;span style=&quot;color: #980000;&quot;&gt;void &lt;/span&gt;&lt;span style=&quot;color: #f15f5f;&quot;&gt;getData&lt;/span&gt;() {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Intent intent = getIntent();&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; albumVO = (AlbumVO) intent.getSerializableExtra(&lt;span style=&quot;color: #003399;&quot;&gt;&quot;albumVO&quot;&lt;/span&gt;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;private &lt;/span&gt;&lt;span style=&quot;color: #980000;&quot;&gt;void &lt;/span&gt;&lt;span style=&quot;color: #f15f5f;&quot;&gt;setInit&lt;/span&gt;() {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; btn_back = (ImageView) findViewById(R.id.btn_back);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; btn_back.setOnClickListener(&lt;span style=&quot;color: #980000;&quot;&gt;this&lt;/span&gt;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; img_thumb = (ImageView) findViewById(R.id.img_thumb);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Glide.with(mContext)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .load(albumVO.getThumb())&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .into(img_thumb);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txt_title = (TextView) findViewById(R.id.txt_title);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txt_title.setText(albumVO.getTitle());&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txt_artist = (TextView) findViewById(R.id.txt_artist);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txt_artist.setText(albumVO.getArtist());&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txt_date = (TextView) findViewById(R.id.txt_date);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txt_date.setText(albumVO.getDate());&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txt_type = (TextView) findViewById(R.id.txt_type);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txt_type.setText(albumVO.getType());&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txt_introduce = (TextView) findViewById(R.id.txt_introduce);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txt_introduce.setText(albumVO.getIntroduce());&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rcc_song = (RecyclerView) findViewById(R.id.rcc_song);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; RecyclerView.LayoutManager mLayoutManager =&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #980000;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;new &lt;/span&gt;LinearLayoutManager(mContext, LinearLayoutManager.VERTICAL, &lt;span style=&quot;color: #980000;&quot;&gt;false&lt;/span&gt;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rcc_song.setLayoutManager(mLayoutManager);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rcc_song.setNestedScrollingEnabled(&lt;span style=&quot;color: #980000;&quot;&gt;false&lt;/span&gt;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SongAdapter mSongAdapter = &lt;span style=&quot;color: #980000;&quot;&gt;new &lt;/span&gt;SongAdapter(mContext, albumVO.getSong());&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rcc_song.setAdapter(mSongAdapter);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; @Override&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;public &lt;/span&gt;&lt;span style=&quot;color: #980000;&quot;&gt;void &lt;/span&gt;&lt;span style=&quot;color: #f15f5f;&quot;&gt;onClick&lt;/span&gt;(View v) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;switch &lt;/span&gt;(v.getId()) {&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;case &lt;/span&gt;R.id.btn_back:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;supportFinishAfterTransition();&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #980000;&quot;&gt;break&lt;/span&gt;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;}&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;받아온 데이터들을 세팅하는 부분과 RecyclerView에 대한 부분은 여기서는 생략하도록 하겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주의 깊게 보셔야 할 부분은 굵게 표시된 &lt;span style=&quot;background-color: #ffd8d8;&quot;&gt;onEnterAnimationComplete()&lt;/span&gt;인데요, 메서드 이름 그대로 &lt;span style=&quot;background-color: #ffd8d8;&quot;&gt;진입 애니메이션이 끝난 시점에 호출&lt;/span&gt; 됩니다. 예제에서는 여기서 받아온 데이터를 처리하도록 하였지만, 필요에 따라 생략하셔도 무방합니다. onCreate()와 onEnterAnimationComplete()에서 setInit() 메서드를 호출해가며 차이를 확인해보시기 바랍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음으로, 되돌아가기 버튼 클릭 시의 처리는 아주 간단하게 한 줄로 해결이 가능합니다. &lt;span style=&quot;background-color: #ffd8d8;&quot;&gt;supportFinishAfterTransition()&lt;/span&gt;만 호출 해주시면 되는데요, 이것도 이름 그대로 &lt;span style=&quot;background-color: #ffd8d8;&quot;&gt;해당 Activity를 finish() 함과 동시에 Transition 애니메이션을 동작&lt;/span&gt;하도록 지원하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기까지 준비된 내용이 끝났습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내용이 길어 보이지만 개념적인 부분은 아주 간단하니, 한번 이해하신다면 다른 곳에 쉽게 적용하실 수 있으실 거라고 생각합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 이만 포스팅을 마치겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;벌써 1월도 끝나가네요.. 포스팅도&amp;nbsp;나름대로 열심히 한다고 하는데 부족함을 많이 느껴지네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 포스팅은 설 지나고 나서 쓰게 될 것 같습니다. 좀 더 많은 준비를 한 후에 뵙도록 하겠습니다. 모두들 즐거운 설 보내시길 바랍니다,!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍/Android</category>
      <author>여름숲_</author>
      <guid isPermaLink="true">https://re-build.tistory.com/43</guid>
      <comments>https://re-build.tistory.com/43#entry43comment</comments>
      <pubDate>Mon, 28 Jan 2019 09:55:44 +0900</pubDate>
    </item>
    <item>
      <title>[Android] RecyclerView 사용하기</title>
      <link>https://re-build.tistory.com/42</link>
      <description>&lt;p&gt;&lt;/p&gt;&lt;p&gt;요즘 나이 먹으면 시간이 빨리 간다는 말에 격하게 공감이 가네요.....&amp;nbsp;&lt;/p&gt;&lt;p&gt;새해가 밝은지 얼마나 됐다고 벌써 1월도 끝나가다니.. ㅠ&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;다들 연초에 세웠던 계획들 아직 잘 지켜지고 계신가요?&amp;nbsp;&lt;/p&gt;&lt;p&gt;나름 지킬 수 있을 만한 것들로 세웠는데도 참 쉽지가 않네요. 그래도 계획이 조금 틀어졌다고 해서 포기하는 것보다 끝까지 노력하려고 하는 마음이 중요하다고 생각합니다. 모두들 열심히 노력해서 원하시는 결과 얻으시길&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;오늘은&amp;nbsp;RecyclerView에 대해 알아보려 합니다. RecyclerView는 ListView와 마찬가지로 리스트 형태의 데이터를 표현하기에 적합한 위젯인데요, ListView와는 어떤 차이가 있는지, 어떻게 사용해야 하는지에 대해 알아보도록 하겠습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;&lt;b&gt;RecyclerView?&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;RecyclerView는 Lollipop(Anroid 5.0) 버전에서 처음 소개되었는데요, &lt;span style=&quot;background-color: rgb(255, 216, 216);&quot;&gt;ListView보다 유연하고 성능이 향상&lt;/span&gt;되었다고 합니다. 그렇다면, RecyclerView에 대해 얘기하기 전에 ListView에 대해 먼저 알아야겠죠?&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;ListView에 대한 내용은 이전 포스트를 통해 확인하시기 바랍니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p&gt;&lt;b&gt;ListView 사용하기&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://re-build.tistory.com/19&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://re-build.tistory.com/19&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그럼, 이제 RecyclerView와 ListView가 어떤 차이가 있는지 간단히 짚고 넘어가도록 하겠습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0px;&quot;&gt;&lt;li&gt;&lt;p style=&quot;padding: 0px;&quot;&gt;&lt;b&gt;ViewHoler 패턴의 의무화&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;padding: 0px; margin-left: 2em;&quot;&gt;ListView에서는 선택적으로 권장되던 ViewHolder 패턴이 RecyclerView에서는 이제 의무적으로&amp;nbsp;꼭!&amp;nbsp;사용하도록 변경 되었습니다.&lt;/p&gt;&lt;p style=&quot;padding: 0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0px;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;LayoutManager 제공&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;ListView에서는 기본적으로 세로 타입의 리스트만&amp;nbsp;지원합니다.&amp;nbsp;물론 커스텀을 통해 여러 타입의 리스트들을&amp;nbsp;구현 할 수 있지만,&amp;nbsp;복잡한 과정을 거쳐야 했습니다. RecyclerView에서는 LayoutManager를 통해 여러 타입의 리스트들을 지원하고 커스텀 할 수 있도록 지원합니다.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;784&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border:none;border-collapse:collapse;;font-family:&quot; 맑은=&quot;&quot; 고딕&quot;,=&quot;&quot; sans-serif;font-size:13px&quot;=&quot;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 34px; height: 24px; border-width: 1px; border-style: none; border-color: rgb(124, 132, 239);&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 244px; height: 24px; border-bottom: 1px none rgb(124, 132, 239); border-right: 1px none rgb(124, 132, 239); border-top: 1px none rgb(124, 132, 239);&quot;&gt;&lt;p&gt;&amp;nbsp;LinearLayoutManager&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 506px; height: 24px; border-bottom: 1px none rgb(124, 132, 239); border-right: 1px none rgb(124, 132, 239); border-top: 1px none rgb(124, 132, 239);&quot;&gt;&lt;p&gt;&amp;nbsp;수직 또는 수평 타입의 리스트를 지원합니다.&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 34px; height: 24px; border-bottom: 1px none rgb(124, 132, 239); border-right: 1px none rgb(124, 132, 239); border-left: 1px none rgb(124, 132, 239);&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 244px; height: 24px; border-bottom: 1px none rgb(124, 132, 239); border-right: 1px none rgb(124, 132, 239);&quot;&gt;&lt;p&gt;&amp;nbsp;GridLayoutManager&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 506px; height: 24px; border-bottom: 1px none rgb(124, 132, 239); border-right: 1px none rgb(124, 132, 239);&quot;&gt;&lt;p&gt;&amp;nbsp;격자형 타입의 리스트를 지원합니다.&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 34px; height: 24px; border-bottom: 1px none rgb(124, 132, 239); border-right: 1px none rgb(124, 132, 239); border-left: 1px none rgb(124, 132, 239);&quot; rowspan=&quot;1&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 244px; height: 24px; border-bottom: 1px none rgb(124, 132, 239); border-right: 1px none rgb(124, 132, 239);&quot; rowspan=&quot;1&quot;&gt;&amp;nbsp;StaggeredGridLayoutManager&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 506px; height: 24px; border-bottom: 1px none rgb(124, 132, 239); border-right: 1px none rgb(124, 132, 239);&quot; rowspan=&quot;1&quot;&gt;&lt;p&gt;&amp;nbsp;ItemView 마다 크기가 다른 리스트를&amp;nbsp;만들 수 있도록 지원합니다.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0px;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;ItemDecoration 클래스 제공&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;ListView에서는 ItemView 사이의 간격에 대한 설정을 Divider를 통해 설정 하였다면, RecyclerView에서는 ItemDecoration 클래스를 통해 설정이 가능합니다. 다소 사용하기에 복잡해지긴 했지만 좀 더 동적인 사용과 커스텀에 유리해졌습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0px;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;ItemAnimator 클래스 제공&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;RecyclerView에서는 애니메이션에 대한 지원을 위해 ItemAnimator 클래스를 제공합니다. ItemAnimator 클래스를 통해 ItemView의 삽입이나 삭제, 이동 등의 애니메이션을 커스텀 할 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0px;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;터치 이벤트 강화&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;ListView에서는 OnItemClickListener를 통해 아이템들의 클릭 여부를 감지 했는데요, RecyclerView에서는 onItemTouchListener를 통해 뷰의 터치 이벤트를 감지합니다. 조금 복잡해 보이실 수 있겠지만, 터치 이벤트를 RecyclerView에 전달하기 전에 제어권을 가져옴으로써, 좀 더 유연한 대처가 가능해졌습니다.&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;RecyclerView는 ListView에 비해 좀 더 사용자의 확장성에 중점을 둔 모습이네요.&lt;/div&gt;&lt;div&gt;소개는 이쯤 마무리 하고 바로 실전으로 넘어가 보도록 하겠습니다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;p&gt;예제에 사용 될 데이터들은 이전 포스트를 이용하여 진행될 예정입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p&gt;&lt;b&gt;GSON 라이브러리&amp;nbsp;사용하기&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://re-build.tistory.com/41&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://re-build.tistory.com/41&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;&lt;b&gt;Gradle에 라이브러리 추가하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;RecyclerView는 Supprot Library에 포함되어 있으므로, 사용을 위해서는 gradle에 추가해주어야 합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;&lt;b&gt;build.gradle (Module: app)&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;dependencies {&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;implementation&amp;nbsp;'com.android.support:recyclerview-v7:26.1.0'&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;버전은 다른 Support Library와 동일하게 맞추어 주어야 합니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;&lt;b&gt;레이아웃에 RecyclerView 추가하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;이어서, 레이아웃을 먼저 작성하겠습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;b&gt;activity_main.xml&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;?&lt;/span&gt;xml version=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;1.0&quot; &lt;/span&gt;encoding=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;LinearLayout&lt;/span&gt; xmlns:android=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;http://schemas.android.com/apk/res/android&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; xmlns:app=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;http://schemas.android.com/apk/res-auto&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; xmlns:tools=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;http://schemas.android.com/tools&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; android:background=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;#000000&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; tools:context=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;rebuild.com.scenetransitionanimation.Activity.MainActivity&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;android.support.v7.widget.RecyclerView&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:id=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;@+id/rcc_album&quot;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_marginLeft=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;16dp&quot;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_marginRight=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;16dp&quot;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:overScrollMode=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;never&quot;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:scrollbars=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;none&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;/LinearLayout&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;&lt;b&gt;Adapter 클래스 구현하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;Adapter를 작성하기에 앞서, 각 아이템에 사용 될 레이아웃을&amp;nbsp;먼저 꾸며보겠습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;b&gt;custom_album_item.xml&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;lt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;?&lt;/span&gt;xml version=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;1.0&quot;&lt;/span&gt; encoding=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;LinearLayout&lt;/span&gt; xmlns:android=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;http://schemas.android.com/apk/res/android&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; android:id=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;@+id/layout_album_panel&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; android:orientation=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;vertical&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;ImageView&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:id=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;@+id/img_thumb&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;150dp&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:scaleType=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;centerCrop&quot;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;LinearLayout&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:orientation=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;vertical&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:paddingBottom=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;5dp&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:paddingTop=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;5dp&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;TextView&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:id=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;@+id/txt_title&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:textColor=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;#ffffff&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:textSize=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;16dp&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;TextView&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:id=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;@+id/txt_artist&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:textColor=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;#8e8e8e&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:textSize=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;14dp&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;/LinearLayout&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;/LinearLayout&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;간단하게 앨범의 썸네일 이미지를 배치 할 ImageView와 앨범의 타이틀과 가수를 표시 할 TextView들을 배치하였습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;이제 데이터와 RecyclerView를 연결할 Adapter를 만들어 보겠습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;b&gt;AlbumAdapter.java&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public class&lt;/span&gt; AlbumAdapter &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;extends &lt;/span&gt;RecyclerView.Adapter&amp;lt;AlbumAdapter.ViewHolder&amp;gt; {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private &lt;/span&gt;Context mContext;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private &lt;/span&gt;ArrayList&amp;lt;AlbumVO&amp;gt; list_album;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;OnItemClickListener mOnItemClickListener = null;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;interface &lt;/span&gt;OnItemClickListener {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;void &lt;/span&gt;onItemClick(View view, AlbumVO albumVO);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;void &lt;/span&gt;setOnItemClickListener(OnItemClickListener listener) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mOnItemClickListener = listener;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;AlbumAdapter&lt;/span&gt;(Context mContext, ArrayList&amp;lt;AlbumVO&amp;gt; list_album) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;this&lt;/span&gt;.mContext = mContext;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;this&lt;/span&gt;.list_album = list_album;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; @Override&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;ViewHolder &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;onCreateViewHolder&lt;/span&gt;(ViewGroup parent, &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;int &lt;/span&gt;viewType) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; View convertView = LayoutInflater.from(mContext).inflate(R.layout.custom_album_item, parent, &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;false&lt;/span&gt;);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;return &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;new &lt;/span&gt;ViewHolder(convertView);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; @Override&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;void &lt;/span&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;onBindViewHolder&lt;/span&gt;(ViewHolder holder, &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;int &lt;/span&gt;position) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; AlbumVO albumVO = list_album.get(position);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Glide.with(mContext)&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .load(albumVO.getThumb())&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .thumbnail(0.5f)&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .into(holder.img_thumb);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; holder.txt_artist.setText(albumVO.getArtist());&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; holder.txt_title.setText(albumVO.getTitle());&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; holder.layout_album_panel.setOnClickListener(&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;new &lt;/span&gt;View.OnClickListener() {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;void &lt;/span&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;onClick&lt;/span&gt;(View v) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mOnItemClickListener.onItemClick(v, albumVO);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; });&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; @Override&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public int&lt;/span&gt; &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;getItemCount&lt;/span&gt;() {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;return &lt;/span&gt;list_album.size();&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public class&lt;/span&gt; ViewHolder &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;extends &lt;/span&gt;RecyclerView.ViewHolder {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private &lt;/span&gt;LinearLayout layout_album_panel;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private&lt;/span&gt; ImageView img_thumb;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private&lt;/span&gt; TextView txt_artist;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private&lt;/span&gt; TextView txt_title;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;ViewHolder&lt;/span&gt;(View convertView) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;super&lt;/span&gt;(convertView);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;layout_album_panel = (LinearLayout) convertView.findViewById(R.id.layout_album_panel);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; img_thumb = (ImageView) convertView.findViewById(R.id.img_thumb);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txt_artist = (TextView) convertView.findViewById(R.id.txt_artist);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txt_title = (TextView) convertView.findViewById(R.id.txt_title);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;}&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;Adapter는 RecyclerView.Adapter&amp;lt;ViewHolder viewHolder&amp;gt;를 상속 받아 작성하였는데요, 어떻게 구성되어 있는지 살펴보도록 하겠습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0px;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;onCreateViewHolder(ViewGroup parent, int ViewType)&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;ViewHolder 생성 시에 호출됩니다. ViewType에 따라 여러 타입의 ViewHolder를 생성할 수도 있습니다.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;처음 화면에 보이는 View에 대해 ViewHolder가&amp;nbsp;생성되며, 이후 스크롤 시에 보여지는 View들은 재활용되는 View이므로 다시 호출되지 않습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0px;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;onBindViewHolder(ViewHolder holder, int position)&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;화면에 ViewHolder가&amp;nbsp;붙을 때마다&amp;nbsp;호출됩니다. 화면에 새로운 View가 붙을 때마다 호출 되므로, 실질적인 데이터 처리는 이곳에서 이루어집니다.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div&gt;&lt;ul style=&quot;margin-bottom: 0px;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;getItemCount()&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;Item의 개수를 반환 합니다. 반환 되는 개수에 따라 생성되는 Item의 개수가 정해집니다.&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;위의 예제에서는 onCreateViewHolder()에서 만들어두었던 레이아웃을 ViewHolder와 연결하고, onBindViewHolder()에서는 넘겨 받은 데이터를 가져와 썸네일 이미지, 타이틀, 가수명 등을 각각 ImageView와 TextView에 세팅하는 것을 확인 하실 수 있습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;OnItemClickListener에 사용 된 커스텀 이벤트 리스너에 대한 상세한 내용은 지난 포스팅을 참고하시기 바랍니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;b&gt;Custom EventListener 사용하기&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;a href=&quot;https://re-build.tistory.com/29&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://re-build.tistory.com/29&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;&lt;b&gt;LayoutManager 설정 및 Adapter 연결하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;이어서, MainActivity에서 RecyclerView를 설정하는 방법에 대해 알아보겠습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;b&gt;MainActivity.java&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public class&lt;/span&gt; MainActivity &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;extends &lt;/span&gt;AppCompatActivity&amp;nbsp;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;implements &lt;/span&gt;AlbumAdapter.OnItemClickListener&amp;nbsp;&amp;nbsp;{&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private &lt;/span&gt;Context mContext;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private &lt;/span&gt;RecyclerView rcc_album;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private &lt;/span&gt;AlbumAdapter mAlbumAdapter;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; @Override&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;protected void&lt;/span&gt; &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;onCreate&lt;/span&gt;(Bundle savedInstanceState) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;super&lt;/span&gt;.onCreate(savedInstanceState);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setContentView(R.layout.activity_main);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mContext = &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;this&lt;/span&gt;;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; init();&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;void &lt;/span&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;init&lt;/span&gt;() {&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rcc_album = (RecyclerView) findViewById(R.id.rcc_album);&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; RecyclerView.LayoutManager mLayoutManager = &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;new &lt;/span&gt;GridLayoutManager(mContext, 2);&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rcc_album.setLayoutManager(mLayoutManager);&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mAlbumAdapter = &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;new &lt;/span&gt;AlbumAdapter(mContext, getAlbumList());&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;mAlbumAdapter.setOnItemClickListener(&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;this&lt;/span&gt;);&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rcc_album.setAdapter(mAlbumAdapter);&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; }&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; @Override&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;void &lt;/span&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;onItemClick&lt;/span&gt;(View view, AlbumVO albumVO) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Log.e(&quot;RecyclerVIew :: &quot;, albumVO.toString())&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;}&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;LayoutManager를 통해 리스트의 형태를 GridLayout으로 지정 한 뒤, RecyclerView.setLayoutManager()로 RecyclerView에 적용해주었습니다.&amp;nbsp; 또한 좀 전에 만든 AlbumAdapter를 RecyclerView.setAdapter를 통해 연결해주었습니다. 간단하죠?&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;이렇게&amp;nbsp;설정을 끝마쳐도 결과는 잘 나오겠지만, 리스트의 Item 사이의 간격을 조절해보기 위해 ItemDecoration을 사용해 보도록 하겠습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;&lt;b&gt;ItemDecoration 적용하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;b&gt;ItemDecoration.java&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public class&lt;/span&gt; ItemDecoration &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;extends &lt;/span&gt;RecyclerView.ItemDecoration {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private int&lt;/span&gt; spanCount;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private int&lt;/span&gt; spacing;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private int&lt;/span&gt; outerMargin;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;ItemDecoration&lt;/span&gt;(Activity mActivity) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; spanCount = 2;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; spacing = (&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;int&lt;/span&gt;) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; margin-left: 24em;&quot;&gt;12, mActivity.getResources().getDisplayMetrics());&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; outerMargin = (&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;int&lt;/span&gt;) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; margin-left: 24em;&quot;&gt;50, mActivity.getResources().getDisplayMetrics());&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; @Override&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public void&lt;/span&gt; &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;getItemOffsets&lt;/span&gt;(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;int &lt;/span&gt;maxCount = parent.getAdapter().getItemCount();&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;int &lt;/span&gt;position = parent.getChildAdapterPosition(view);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;int &lt;/span&gt;column = position % spanCount;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;int &lt;/span&gt;row = position / spanCount;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;int &lt;/span&gt;lastRow = (maxCount - 1) / spanCount;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; outRect.left = column * spacing / spanCount;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; outRect.right = spacing - (column + 1) * spacing / spanCount;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; outRect.top = spacing * 2;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;if &lt;/span&gt;(row == lastRow) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; outRect.bottom = outerMargin;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;}&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;ItemDecoration 클래스는 RecyclerView.ItemDecoration 클래스를 상속받아 작성하였습니다. Item의 간격의 설정은 Override된 getItemOffsets()에서 해주시면 됩니다. 예제에서는 복잡하게 작성된 듯 보이지만 실질적으로 outRect의 left, right, top, bottom 값만 조절 해주시면 됩니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;그럼 다시 Activity로 돌아와서,&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;b&gt;MainActivity.java&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public class&lt;/span&gt;&amp;nbsp;MainActivity&amp;nbsp;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;extends&amp;nbsp;&lt;/span&gt;AppCompatActivity &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;i&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;mplements &lt;/span&gt;AlbumAdapter.OnItemClickListener&amp;nbsp;&amp;nbsp;{&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;void&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;init&lt;/span&gt;() {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rcc_album = (RecyclerView) findViewById(R.id.rcc_album);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; RecyclerView.LayoutManager mLayoutManager =&amp;nbsp;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;new&amp;nbsp;&lt;/span&gt;GridLayoutManager(mContext, 2);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rcc_album.setLayoutManager(mLayoutManager);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rcc_album.addItemDecoration(&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;new &lt;/span&gt;ItemDecoration(&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;this&lt;/span&gt;))&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mAlbumAdapter =&amp;nbsp;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;new&amp;nbsp;&lt;/span&gt;AlbumAdapter(mContext, getAlbumList());&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rcc_album.setAdapter(mAlbumAdapter);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;}&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;이렇게 한 줄만 추가해주시면 되겠습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;&lt;b&gt;실행 화면&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 300px; width: 300px; height: 617px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/996020485C4AD0BD33&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F996020485C4AD0BD33&quot; width=&quot;300&quot; height=&quot;617&quot; filename=&quot;RecyclerView.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 300px; height: 617px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;예제 실행 화면&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;이번에는 RecyclerView에 대해 간단히 알아보았는데요, 사실 깊게 파고자 하면 끝이 없어서 어디까지 포스팅을 해야할지 고민이 많습니다.&lt;/p&gt;&lt;p&gt;다음 포스팅은 오늘 예제에 이어 Scene Transition Animation에 대해 알아보도록 하겠습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>프로그래밍/Android</category>
      <author>여름숲_</author>
      <guid isPermaLink="true">https://re-build.tistory.com/42</guid>
      <comments>https://re-build.tistory.com/42#entry42comment</comments>
      <pubDate>Mon, 21 Jan 2019 16:42:33 +0900</pubDate>
    </item>
    <item>
      <title>[Android] GSON 라이브러리 사용하기</title>
      <link>https://re-build.tistory.com/41</link>
      <description>&lt;p&gt;&lt;/p&gt;&lt;p&gt;오늘은 간단하게 Gson 라이브러리에 대해 알아 볼 텐데요.&amp;nbsp;Gson 라이브러리도 여러 종류가 있지만, 오늘 소개할 라이브러리는 Google에서 제공하는 오픈 소스 라이브러리 입니다. 다른 라이브러리들도 사용법은 비슷하기에 알아두시면 다른 라이브러리에도 쉽게 접근하실 수 있으실 겁니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그럼 시작하겠습니다.!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;&lt;b&gt;GSON 라이브러리?&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;GSON&amp;nbsp;라이브러리는&lt;span style=&quot;background-color: rgb(255, 216, 216);&quot;&gt;&amp;nbsp;Java Object를 JSON으로 또는, JSON을 Java Object로의 변환&lt;/span&gt;을 도와주는 라이브러리입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p&gt;&lt;b&gt;JSON?&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;JSON은 JavaScript Object Notation의 약자로 Name과&amp;nbsp;Value로 이루어진 하나의 텍스트 형식입니다.&lt;/p&gt;&lt;p&gt;JSON은 언어로부터 독립적이기 때문에 다수의 언어(C, C++, C#, java, javaScript 등)간의 데이터 교환에 사용됩니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;JSON에서는 기본적으로 key : value 형태로 데이터를 표현합니다, 또한 데이터들을 묶어&amp;nbsp;Object(중괄호 { }로 표기)와&amp;nbsp;Array(대괄호 [ ]로 표기) 형태로 표현합니다.&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;일단 사용 해볼까요?&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;&lt;b&gt;JSON 파일 준비하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;라이브러리를 사용하기에 앞서, 우선 JSON 파일을 작성하겠습니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;데이터가 이미 있으신 분들은 건너뛰셔도 무방합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;&lt;b&gt;album.json&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;{&amp;nbsp;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;&quot;album&quot;&amp;nbsp;&lt;/span&gt;: [&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;{ &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;&quot;title&quot;&lt;/span&gt; : &quot;BINGLE BANGLE&quot;,&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;&amp;nbsp; &quot;artist&quot;&lt;/span&gt;&amp;nbsp;: &quot;AOA&quot;,&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;&amp;nbsp; &quot;thumb&quot;&lt;/span&gt; :&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&quot;https://musicmeta-phinf.pstatic.net/album/002/459/2459722.jpg?type=r204Fll&amp;amp;v=20181212201500&quot;,&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;&amp;nbsp; &quot;date&quot;&lt;/span&gt; : &quot;2018.05.28&quot;,&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;&amp;nbsp; &quot;type&quot;&lt;/span&gt; : &quot;댄스&quot;,&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;&amp;nbsp; &quot;song&quot;&lt;/span&gt; :&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;[&quot;빙글뱅글 (BINGLE BANGLE)&quot;, &quot;Super Duper&quot;, &quot;HEAT&quot;, &quot;Ladi Dadi&quot;, &quot;파르페&quot;, &quot;뚜뚜뚜&quot;],&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;&amp;nbsp; &quot;introduce&quot;&lt;/span&gt; :&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&quot;올 여름을 강타할 AOA표 서머송!\nAOA의 상큼발랄 펑키팝 '빙글뱅글 (Bingle Bangle)'\n\n그룹 AOA가 경쾌하고 신나는 퍼포먼스로 돌아왔다.&quot;},&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;{&amp;nbsp;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;&quot;title&quot;&lt;/span&gt; : &quot;RBB&quot;,&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;&amp;nbsp; &quot;artist&quot;&lt;/span&gt;&amp;nbsp;: &quot;Red Velvet&quot;,&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;&amp;nbsp; &quot;thumb&quot;&lt;/span&gt; :&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&quot;https://musicmeta-phinf.pstatic.net/album/002/652/2652254.jpg?type=r204Fll&amp;amp;v=20181211115148&quot;,&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;&amp;nbsp; &quot;date&quot;&lt;/span&gt; : &quot;2018.11.30&quot;,&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;&amp;nbsp; &quot;type&quot;&lt;/span&gt; : &quot;댄스, 알앤비/어반&quot;,&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;&amp;nbsp; &quot;song&quot;&lt;/span&gt; :&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;[&quot;RBB (Really Bad Boy)&quot;, &quot;Bufferflies&quot;, &quot;So Good&quot;, &quot;멋있게 (Sassy Me)&quot;, &quot;Taste&quot;, &quot;RBB (Really Bad Boy) (English Ver.&quot;],&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;&amp;nbsp; &quot;introduce&quot;&lt;/span&gt; :&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&quot;'대체불가 걸그룹' 레드벨벳, 2018 연말 가요계도 점령한다!\n새 미니앨범 'RBB' 공개!\n타이틀 곡 'RBB (Really Bad Boy)'로 히트 행진 잇는다!&quot;},&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;{&amp;nbsp;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;&quot;title&quot;&lt;/span&gt; : &quot;Circular&quot;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;&amp;nbsp; &quot;artist&quot;&lt;/span&gt;&amp;nbsp;: &quot;M.C THE MAX&quot;,,&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;&amp;nbsp; &quot;thumb&quot;&lt;/span&gt; :&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&quot;https://musicmeta-phinf.pstatic.net/album/002/798/2798709.jpg?type=r204Fll&amp;amp;v=20190104184015&quot;,&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;&amp;nbsp; &quot;date&quot;&lt;/span&gt; : &quot;2019.01.02&quot;,&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;&amp;nbsp; &quot;type&quot;&lt;/span&gt; : &quot;발라드&quot;,&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;&amp;nbsp; &quot;song&quot;&lt;/span&gt; :&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;[&quot;사계 (하루살이)&quot;, &quot;넘쳐흘러&quot;, &quot;시간을 견디면&quot;, &quot;그걸로 나는 충분해요&quot;, &quot;너의 목소리가 들려&quot;, &quot;물그림&quot;, &quot;가&quot;, &quot;Eh-O!&quot;, &quot;Circular OP.1 (Crevasse)&quot;, &quot;Circular OP.2 (Restored)&quot;, &quot;사계 (하루살이) (Inst.)&quot;, &quot;넘쳐흘러 (Inst.)&quot;, &quot;그걸로 나는 충분해요 (Inst.)&quot;, &quot;물그림 (Inst.)&quot;],&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;&amp;nbsp; &quot;introduce&quot;&lt;/span&gt; :&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&quot;'엠씨더맥스' 3년 만의 정규 앨범, 9집 [Circular] 발매!\n\n3년이라는 긴 공백 끝에 정규 9집 [Circular]로 돌아온 '엠씨더맥스'!&quot;},&lt;/p&gt;&lt;p&gt;]}&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;예제를 위해서 위에 작성 된 Json을 파일로 프로젝트로 추가하도록 하겠습니다.&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 250px; width: 250px; height: 256px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/998C84465C4008530C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F998C84465C4008530C&quot; width=&quot;250&quot; height=&quot;256&quot; filename=&quot;assets.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 250px; height: 256px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;assets/album.json&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;위의 그림과 같이 assets 폴더 생성 후, 안에 json 파일을 넣었습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;자, 이제 이 JSON을 GSON을 사용하여 안드로이드에서 사용할 수 있도록 Java Object 형태로 변환하는 법에 대해 먼저 알아보겠습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;&lt;b&gt;Gradle에 라이브러리 추가하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;GSON 라이브러리를 사용하려면 Gradle에 등록해야 합니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;b&gt;build.fradle (Module: app)&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;dependencies {&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; margin-left: 2em;&quot;&gt;implementation &lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;'com.google.code.gson:gson:2.8.5'&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;}&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;&lt;b&gt;데이터 VO 클래스 작성하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;Json 데이터들을 파싱하기 전에, 먼저 데이터를 담을 그릇이 필요하겠죠?&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;각 앨범에 대한 정보들을 담을 VO 클래스를 작성하겠습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;b&gt;AlbumVO.java&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public class&lt;/span&gt; AlbumVO&amp;nbsp;{&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private &lt;/span&gt;String thumb;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private &lt;/span&gt;String artist;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private &lt;/span&gt;String date;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private &lt;/span&gt;String type;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private &lt;/span&gt;String title;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private &lt;/span&gt;ArrayList&amp;lt;String&amp;gt; song;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private &lt;/span&gt;String introduce;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;String &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;getThumb&lt;/span&gt;() {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;return &lt;/span&gt;thumb;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;void &lt;/span&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;setThumb&lt;/span&gt;(String thumb) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;this&lt;/span&gt;.thumb = thumb;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;String &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;getArtist&lt;/span&gt;() {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;return &lt;/span&gt;artist;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;void &lt;/span&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;setArtist&lt;/span&gt;(String artist) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;this&lt;/span&gt;.artist = artist;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;String &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;getDate&lt;/span&gt;() {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;return &lt;/span&gt;date;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;void &lt;/span&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;setDate&lt;/span&gt;(String date) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;this&lt;/span&gt;.date = date;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;String &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;getType&lt;/span&gt;() {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;return &lt;/span&gt;type;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;void &lt;/span&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;setType&lt;/span&gt;(String type) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;this&lt;/span&gt;.type = type;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;String &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;getTitle&lt;/span&gt;() {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;return &lt;/span&gt;title;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;void &lt;/span&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;setTitle&lt;/span&gt;(String title) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;this&lt;/span&gt;.title = title;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;ArrayList&amp;lt;String&amp;gt; &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;getSong&lt;/span&gt;() {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;return &lt;/span&gt;song;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;setSong&lt;/span&gt;(ArrayList&amp;lt;String&amp;gt; song) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;this&lt;/span&gt;.song = song;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;String &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;getIntroduce&lt;/span&gt;() {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;return &lt;/span&gt;introduce;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;void &lt;/span&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;setIntroduce&lt;/span&gt;(String introduce) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;this&lt;/span&gt;.introduce = introduce;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; @Override&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;String &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;toString&lt;/span&gt;() {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;return &lt;/span&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;AlbumVO{&quot;&lt;/span&gt; +&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;thumb='&quot;&lt;/span&gt; + thumb + '\'' +&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;, artist='&quot;&lt;/span&gt; + artist + '\'' +&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;, date='&quot;&lt;/span&gt; + date + '\'' +&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;, type='&quot;&lt;/span&gt; + type + '\'' +&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;, title='&quot;&lt;/span&gt; + title + '\'' +&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;, song=&quot;&lt;/span&gt; + song +&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;, introduce='&quot;&lt;/span&gt; + introduce + '\'' +&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;'}'&lt;/span&gt;;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;}&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;작성할 때 주의하실 점은 &lt;span style=&quot;background-color: rgb(255, 216, 216);&quot;&gt;JSON에 작성하신 key와&lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 216, 216);&quot;&gt;&amp;nbsp;동일하게 변수 명을 작성&lt;/span&gt;하셔야 합니다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;이어서, Activity에서 json파일을 불러와 파싱 하는 법을 살펴보겠습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;&lt;b&gt;JSON 데이터 파싱하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;b&gt;MainActivity.java&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private &lt;/span&gt;ArrayList&amp;lt;AlbumVO&amp;gt; &lt;span style=&quot;color: rgb(204, 61, 61);&quot;&gt;getAlbumList&lt;/span&gt;() {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; margin-left: 2em;&quot;&gt;ArrayList&amp;lt;AlbumVO&amp;gt; list_album = &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;new &lt;/span&gt;ArrayList&amp;lt;&amp;gt;();&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; margin-left: 2em;&quot;&gt;&lt;b&gt;Gson gson = &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;new &lt;/span&gt;Gson();&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; margin-left: 2em;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;try&lt;/span&gt; {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; margin-left: 4em;&quot;&gt;InputStream is = getAssets().open(&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;album.json&quot;&lt;/span&gt;);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; margin-left: 4em;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;byte&lt;/span&gt;[] buffer = &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;new &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;byte&lt;/span&gt;[is.available()];&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; margin-left: 4em;&quot;&gt;is.read(buffer);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; margin-left: 4em;&quot;&gt;is.close();&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; margin-left: 4em;&quot;&gt;String json = &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;new &lt;/span&gt;String(buffer, &lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;UTF-8&quot;&lt;/span&gt;);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; margin-left: 4em;&quot;&gt;JSONObject jsonObject = &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;new &lt;/span&gt;JSONObject(json);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; margin-left: 4em;&quot;&gt;JSONArray jsonArray = jsonObject.getJSONArray(&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;album&quot;&lt;/span&gt;);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; margin-left: 4em;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;int &lt;/span&gt;index = 0;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; margin-left: 4em;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;while &lt;/span&gt;(index &amp;lt; jsonArray.length()) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; margin-left: 6em;&quot;&gt;AlbumVO albumVO = &lt;b&gt;gson.fromJson(jsonArray.get(index).toString(), AlbumVO.&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;class&lt;/span&gt;);&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; margin-left: 6em;&quot;&gt;list_album.add(albumVO);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; margin-left: 6em;&quot;&gt;index++;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; margin-left: 4em;&quot;&gt;}&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; margin-left: 2em;&quot;&gt;} &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;catch &lt;/span&gt;(Exception e) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; margin-left: 4em;&quot;&gt;e.printStackTrace();&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; margin-left: 2em;&quot;&gt;}&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; margin-left: 2em;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;return &lt;/span&gt;list_album;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;}&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;먼저, InputStream을 열어 assets 폴더에 있는 album.json을 가져와 String 타입으로 데이터를 담았습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;이 상태에서는 모든 데이터가 하나의 String 타입의 문자들로&amp;nbsp;이루어져 있기 때문에 원하는 데이터를 가져오기에 어려움이 있습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;하여, 데이터를 각각의 앨범 단위로 나누어 AlbumVO에 담아 원하는 데이터에 접근하기 쉽도록 하겠습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;각 앨범의 정보를 각각의 AlbumVO에 담기 위해서 데이터를 앨범 단위로 나누어야 하겠죠?&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;JSONObject로 변환한 뒤, album이라는 key를&amp;nbsp;이용해 데이터를&amp;nbsp;JSONArray 형태로 변환하였습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;이제 JsonArray의 각 포지션마다 다른 앨범의 정보들을 가지고 있겠네요.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;여기서 각각의 정보에 대한 name 값을 통해 각 데이터에 접근하여 각 데이터들을 AlbumVO에 담아도&amp;nbsp;되겠지만, 우리는 GSON 라이브러리를 사용해 한번에 해결하도록 하겠습니다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;GSON 라이브러리에도 여러가지 기능들이 있지만, 간단하게 변환에 관련되어 자주 쓰이는 것만 소개하도록 하겠습니다.&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;자세한 라이브러리에 대한 내용은 API Javadoc을 확인해주시길 바랍니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0px;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;fromJson()&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- JSON&amp;nbsp;형식의 데이터를&amp;nbsp;지정한 타입의 데이터로 변환합니다.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0px;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;toJson()&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- 지정된 타입의 데이터를 JSON 형식의 데이터로 변환합니다.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;위의 예제를 예시로 들면 다음과 같이 데이터가 변환되는 것을 알 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;818&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; 맑은=&quot;&quot; 고딕&quot;,=&quot;&quot; sans-serif;font-size:13px&quot;=&quot;&quot; style=&quot;border: none; border-collapse: collapse; width: 818px;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td rowspan=&quot;1&quot; style=&quot;width: 372px; height: 24px; border-width: 1px; border-style: none none solid; border-color: rgb(124, 132, 239) rgb(124, 132, 239) rgb(0, 0, 0);&quot;&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Json&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;td rowspan=&quot;1&quot; style=&quot;width: 446px; height: 24px; border-bottom: 1px solid rgb(0, 0, 0); border-right: 1px none rgb(124, 132, 239); border-top: 1px none rgb(124, 132, 239);&quot;&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;AlbumVO&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width: 372px; height: 24px; border-width: 1px; border-style: solid none none; border-color: rgb(204, 204, 204) rgb(124, 132, 239) rgb(124, 132, 239);&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(241, 95, 95); font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;&quot;title&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;: &quot;BINGLE BANGLE&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(241, 95, 95); font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;&quot;artist&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;: &quot;AOA&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(241, 95, 95); font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;&quot;thumb&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;: &quot;https://musicmetaphinf...&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(241, 95, 95); font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;&quot;date&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;: &quot;2018.05.28&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(241, 95, 95); font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;&quot;type&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;: &quot;댄스&quot;,&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(241, 95, 95); font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;&quot;song&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;: [&quot;빙글뱅글 (BINGLE BANGLE)&quot;,&amp;nbsp;... ],&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(241, 95, 95); font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;&quot;introduce&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;: &quot;올 여름을 강타할 AOA&amp;nbsp;... &quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 446px; height: 24px; border-bottom: 1px none rgb(124, 132, 239); border-right: 1px none rgb(124, 132, 239); border-top: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0); font-size: 10pt;&quot;&gt;&amp;nbsp;public Class&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp;AlbumVO {&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0); font-size: 10pt;&quot;&gt;private&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;String title = &quot;BINGLE BANGLE&quot;;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0); font-size: 10pt;&quot;&gt;private&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;String artist = &quot;AOA&quot;;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0); font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp; private&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 9pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;String thumb = &quot;https://musi&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;cmetaphinf...&quot;;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0); font-size: 10pt;&quot;&gt;private&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;String date = &quot;2018.05.28&quot;;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0); font-size: 10pt;&quot;&gt;private&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;String type = &quot;댄스&quot;;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0); font-size: 10pt;&quot;&gt;private&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;ArrayList&amp;lt;String&amp;gt; song =&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;{&quot;빙글뱅글 (BING&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;LE BANGLE)&quot;,&amp;nbsp;...&amp;nbsp;};&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0); font-size: 10pt;&quot;&gt;private&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;String introduce = &quot;올 여름을 강타할 AOA&amp;nbsp;...&amp;nbsp;&quot;;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;사실 설명 할 부분이 거의 없어 글이 괜히 길어진 느낌이네요.. 자세한 내용들은 API 문서에 전부 있어 따로 설명드릴 것도 없기에, 이런 것도 있구나 정도로 봐주시면 감사하겠습니다.&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>프로그래밍/Android</category>
      <author>여름숲_</author>
      <guid isPermaLink="true">https://re-build.tistory.com/41</guid>
      <comments>https://re-build.tistory.com/41#entry41comment</comments>
      <pubDate>Thu, 17 Jan 2019 12:12:39 +0900</pubDate>
    </item>
    <item>
      <title>[Android] Circular Reveal Amimation</title>
      <link>https://re-build.tistory.com/38</link>
      <description>&lt;p&gt;&lt;/p&gt;&lt;p&gt;이번 포스팅은 애니메이션 효과에 대해 말해볼까 합니다.&lt;/p&gt;&lt;p&gt;요즘 새로 나오는 어플들을 보면 단순히 페이지를 넘길 때나 스크롤 할 때 등 사용자의 반응에 따라&amp;nbsp;애니메이션 효과가 적용되어있는 것을 볼 수 있습니다. 딱 보기에도 뭔가 있어 보이는게 좋아보이네요. 저희도 뒤쳐질 수 없겠죠?&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그럼 포스팅을 시작하겠습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;&lt;b&gt;Circular Reveal Animation?&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;이름부터 생소하신 분들이 많을 거라고 예상합니다. 저 또한 그랬는데요,&amp;nbsp;흔히 알고 있던 크기 또는&amp;nbsp;투명도를 조절하거나 회전을 주는 등의 애니메이션이 아닌 새로운 애니메이션 효과에 신기하기만 했었던 것만 같습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그럼 Circular Reveal Animation은 어떤 애니메이션 일까요?&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 300px; width: 300px; height: 617px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9918D0365C35B97F17&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9918D0365C35B97F17&quot; width=&quot;300&quot; height=&quot;617&quot; filename=&quot;reveal.gif&quot; filemime=&quot;image/gif&quot; style=&quot;width: 300px; height: 617px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;Circular Reveal Animation 예시&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;위의 예시에서 Fab 버튼을 눌렀을 때,&amp;nbsp;&lt;b&gt;원형으로 퍼져나가는 효과&lt;/b&gt;가 바로 Circular Reveal Animation 효과입니다. 물론 애니메이션 속도나 원의 반경 등은 조절이 가능합니다. 이어서 사용법에 대해 알아보도록 하겠습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;&lt;b&gt;Circular Revael Animation 사용하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;먼저 레이아웃을 구성하도록 하겠습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;&lt;b&gt;activity_main.xml&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;?&lt;/span&gt;xml version=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;1.0&quot;&lt;/span&gt; encoding=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;RelativeLayout&lt;/span&gt; xmlns:android=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;http://schemas.android.com/apk/res/android&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; xmlns:app=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;http://schemas.android.com/apk/res-auto&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; xmlns:tools=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;http://schemas.android.com/tools&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; tools:context=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;rebuild.com.circularrevealanimation.MainActivity&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;RelativeLayout&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:id=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;@+id/layout_main&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;TextView&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_centerInParent=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:text=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;숲속의 작은 이야기&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:textSize=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;30dp&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;/RelativeLayout&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;RelativeLayout&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:id=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;@+id/layout_content&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:background=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;#009688&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;TextView&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_centerInParent=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:text=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;숲속의 작은 이야기&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:textColor=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;#FFFFFF&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:textSize=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;30dp&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;/RelativeLayout&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;android.support.design.widget.FloatingActionButton&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:id=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;@+id/fab_toggle&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_alignParentBottom=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_alignParentRight=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_marginBottom=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;20dp&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_marginRight=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;20dp&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:src=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;@drawable/ic_add&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; app:backgroundTint=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;#009688&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; app:borderWidth=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;0dp&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; app:fabSize=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;normal&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;/RelativeLayout&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;기본적으로 보여지는 main화면과 fab 버튼을 눌렀을 때 보여질 content 레이아웃으로 구성하였습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;Fab 버튼에 대한 내용은 이전 포스트를 참고해주시기 바랍니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;b&gt;FloatingActionButton 사용하기&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;a href=&quot;http://re-build.tistory.com/31&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://re-build.tistory.com/31&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;이어서, Activity를 구성해 보겠습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;b&gt;MainActivity.java&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;package &lt;/span&gt;rebuild.com.circularrevealanimation;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import &lt;/span&gt;android.animation.Animator;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import &lt;/span&gt;android.content.Context;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import &lt;/span&gt;android.content.res.ColorStateList;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import &lt;/span&gt;android.graphics.Color;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import &lt;/span&gt;android.os.Bundle;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import &lt;/span&gt;android.support.design.widget.FloatingActionButton;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import &lt;/span&gt;android.support.v7.app.AppCompatActivity;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import &lt;/span&gt;android.view.View;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import &lt;/span&gt;android.view.ViewAnimationUtils;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import &lt;/span&gt;android.widget.RelativeLayout;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public class&lt;/span&gt; MainActivity &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;extends &lt;/span&gt;AppCompatActivity &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;implements &lt;/span&gt;View.OnClickListener {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private &lt;/span&gt;Context mContext;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private &lt;/span&gt;RelativeLayout layout_content;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private&lt;/span&gt; FloatingActionButton fab_toggle;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private boolean&lt;/span&gt; isOpen = &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;false&lt;/span&gt;;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; @Override&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;protected void&lt;/span&gt; &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;onCreate&lt;/span&gt;(Bundle savedInstanceState) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; super.onCreate(savedInstanceState);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setContentView(R.layout.activity_main);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mContext = &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;this&lt;/span&gt;;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; init();&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private void&lt;/span&gt; &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;init&lt;/span&gt;() {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; layout_content = (RelativeLayout) findViewById(R.id.layout_content);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; layout_content.setVisibility(View.INVISIBLE);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fab_toggle = (FloatingActionButton) findViewById(R.id.fab_toggle);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fab_toggle.setOnClickListener(&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;this&lt;/span&gt;);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private void&lt;/span&gt; &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;showReveal&lt;/span&gt;() {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;int &lt;/span&gt;centerX = (&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;int&lt;/span&gt;) fab_toggle.getX() + fab_toggle.getWidth() / &lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;2&lt;/span&gt;;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;int &lt;/span&gt;centerY = (&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;int&lt;/span&gt;) fab_toggle.getY() + fab_toggle.getHeight() / &lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;2&lt;/span&gt;;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;int &lt;/span&gt;radius = (&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;int&lt;/span&gt;) Math.hypot(layout_content.getWidth(), layout_content.getHeight());&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;if &lt;/span&gt;(isOpen) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fab_toggle.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor(&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;#009688&quot;&lt;/span&gt;)));&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fab_toggle.setImageResource(R.drawable.ic_add);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;Animator revealAnimator = ViewAnimationUtils&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; margin-left: 16em;&quot;&gt;&lt;b&gt;.createCircularReveal(layout_content, centerX, centerY, radius, &lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;0&lt;/span&gt;);&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; revealAnimator.addListener(mRevealAnimatorListener);&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; revealAnimator.setDuration(&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;300&lt;/span&gt;);&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; revealAnimator.start();&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;else &lt;/span&gt;{&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fab_toggle.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor(&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;#FFFFFF&quot;&lt;/span&gt;)));&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fab_toggle.setImageResource(R.drawable.ic_close);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Animator revealAnimator = ViewAnimationUtils&lt;/p&gt;&lt;p style=&quot;clear: none; float: none; margin-left: 16em;&quot;&gt;.createCircularReveal(layout_content, centerX, centerY, &lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;0&lt;/span&gt;, radius);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; revealAnimator.setDuration(&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;300&lt;/span&gt;);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; layout_content.setVisibility(View.VISIBLE);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; revealAnimator.start();&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; isOpen = !isOpen;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; @Override&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public void&lt;/span&gt; &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;onClick&lt;/span&gt;(View v) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;switch &lt;/span&gt;(v.getId()) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;case &lt;/span&gt;R.id.fab_toggle:&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; showReveal();&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;break&lt;/span&gt;;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private &lt;/span&gt;Animator.AnimatorListener mRevealAnimatorListener = &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;new &lt;/span&gt;Animator.AnimatorListener() {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;void &lt;/span&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;onAnimationStart&lt;/span&gt;(Animator animation) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public void&lt;/span&gt; &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;onAnimationEnd&lt;/span&gt;(Animator animation) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; layout_content.setVisibility(View.INVISIBLE);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public void&lt;/span&gt; &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;onAnimationCancel&lt;/span&gt;(Animator animation) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public void&lt;/span&gt; &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;onAnimationRepeat&lt;/span&gt;(Animator animation) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public void&lt;/span&gt; &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;onAnimationStart&lt;/span&gt;(Animator animation, boolean isReverse) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public void&lt;/span&gt; &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;onAnimationEnd&lt;/span&gt;(Animator animation, boolean isReverse) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; };&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;}&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;주요 부분은 굵게 표시된 부분인데요, 자세히 한번 보겠습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p&gt;&lt;b&gt;createCircularReveal(View tagetView, int centerX, int centerY, float startRadius, float endRadius)&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0px;&quot;&gt;&lt;li&gt;&lt;p style=&quot;padding: 0px;&quot;&gt;&lt;b&gt;View tagetView&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;padding: 0px; margin-left: 2em;&quot;&gt;- 애니메이션을 적용 할 타겟이 되는 뷰를 지정합니다.&lt;/p&gt;&lt;p style=&quot;padding: 0px; margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0px;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;centerX&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- 애니메이션의&amp;nbsp;중심이 되는&amp;nbsp;x좌표 값을 지정합니다.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0px;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;centerY&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- 애니메이션의 중심이 되는&amp;nbsp;&amp;nbsp;y좌표 값을 지정합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0px;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;startRadius&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- 애니메이션 시작 시점의 원의 반경을 지정합니다.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0px;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;endRadius&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- 애니메이션 종료 시점의 원의 반경을 지정합니다.&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;보기보다 사용이 굉장히 간단하죠?&lt;/p&gt;&lt;p&gt;주의하실 점은 &lt;span style=&quot;background-color: rgb(255, 216, 216);&quot;&gt;애니메이션이 일단 시작되면 끝날 때까지 중간에 정지 할 수 없다&lt;/span&gt;는 점과 &lt;span style=&quot;background-color: rgb(255, 216, 216);&quot;&gt;재 사용이 불가능&lt;/span&gt; 하다는 점 입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;간단하게 예제를 통해서 Circular Reveal Animation에 대해서 알아봤는데요, 도움이 좀 되셨을까요?&lt;/p&gt;&lt;p&gt;다음 포스팅도 조만간 올리도록 노력하겠습니다.&lt;/p&gt;&lt;p&gt;이상으로 포스팅을 마치겠습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</description>
      <category>프로그래밍/Android</category>
      <author>여름숲_</author>
      <guid isPermaLink="true">https://re-build.tistory.com/38</guid>
      <comments>https://re-build.tistory.com/38#entry38comment</comments>
      <pubDate>Wed, 9 Jan 2019 17:16:07 +0900</pubDate>
    </item>
    <item>
      <title>[Android] SharedPreferences 사용하기</title>
      <link>https://re-build.tistory.com/37</link>
      <description>&lt;p&gt;&lt;/p&gt;&lt;p&gt;이래저래 바쁘다는 핑계로 미루다가 오랜만에 포스팅을 하게 되었습니다.&lt;/p&gt;&lt;p&gt;벌써 새해가 밝았네요. 저만 시간이 빨리 가는 것처럼 느껴지는 건 아니겠죠?&lt;/p&gt;&lt;p&gt;모두 새해에는 좋은 일이 생겼으면 좋겠습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;&lt;b&gt;SharedPreferences?&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;개발을 진행하다 보면, 앱의 데이터들을 저장하여 관리해야 할 상황에 직면하게 되는데요. 데이터의 양이 많거나 중요한 데이터라면 서버나 DB, 파일의 형태로 저장을 하면 되겠지만,&amp;nbsp;간단한 설정 값이나 문자열&amp;nbsp;같은 데이터들은 DB에 저장하기에는 부담스럽고 애매한 경우가 있습니다.&amp;nbsp;이런 경우 안드로이드에서&amp;nbsp;기본적으로 제공되는 SharedPreferences를 사용하여 데이터를 관리한다면 좀 더 편리하게 사용이 가능합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;SharedPreferences는 &lt;span style=&quot;background-color: rgb(255, 216, 216);&quot;&gt;데이터를 파일로 저장&lt;/span&gt;을 하는데요, 파일이 앱 폴더&amp;nbsp;내에 저장되므로 앱을 삭제하시면 당연히 데이터도 삭제됩니다.&lt;/p&gt;&lt;p&gt;자세한 파일의 위치는 아래와 같습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p&gt;data/data/(package_name)/shared_prefs/SharedPreference&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;&lt;b&gt;SharedPreferences 클래스&amp;nbsp;작성하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;SharedPreferences는 데이터를 타입(String, int, .. 등)에 따라 관리하기 때문에 따로 클래스로 만들어서 사용하시면 편리합니다. 한번 만들어 두면 다른 프로젝트에 그대로 복사해서 사용이 가능하기도 합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;&lt;b&gt;PreferenceManager.java&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;package &lt;/span&gt;rebuild.com.sharedpreferences;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import &lt;/span&gt;android.content.Context;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import &lt;/span&gt;android.content.SharedPreferences;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;/**&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp;* 데이터 저장 및 로드 클래스&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp;*/&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public class&lt;/span&gt; PreferenceManager {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public static final&lt;/span&gt; String PREFERENCES_NAME = &lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;rebuild&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;_preference&quot;&lt;/span&gt;;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private static final&lt;/span&gt; String DEFAULT_VALUE_STRING = &lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;&quot;&lt;/span&gt;;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private static final boolean&lt;/span&gt; DEFAULT_VALUE_BOOLEAN = false;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private static final int&lt;/span&gt; DEFAULT_VALUE_INT = -1;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private static final long&lt;/span&gt; DEFAULT_VALUE_LONG = -1L;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private static final float&lt;/span&gt; DEFAULT_VALUE_FLOAT = -1F;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private static&lt;/span&gt; SharedPreferences &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;getPreferences&lt;/span&gt;(Context context) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;return &lt;/span&gt;context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; /**&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* String 값 저장&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param context&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param key&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param value&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public static void&lt;/span&gt; &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;setString&lt;/span&gt;(Context context, String key, String value) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SharedPreferences prefs = getPreferences(context);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SharedPreferences.Editor editor = prefs.edit();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; editor.putString(key, value);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; editor.commit();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; /**&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* boolean 값 저장&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param context&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param key&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param value&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public static void&lt;/span&gt; &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;setBoolean&lt;/span&gt;(Context context, String key, &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;boolean &lt;/span&gt;value) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SharedPreferences prefs = getPreferences(context);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SharedPreferences.Editor editor = prefs.edit();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; editor.putBoolean(key, value);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; editor.commit();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; /**&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* int 값 저장&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param context&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param key&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param value&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public static void&lt;/span&gt; &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;setInt&lt;/span&gt;(Context context, String key, &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;int &lt;/span&gt;value) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SharedPreferences prefs = getPreferences(context);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SharedPreferences.Editor editor = prefs.edit();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; editor.putInt(key, value);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; editor.commit();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; /**&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* long 값 저장&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param context&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param key&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param value&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public static void&lt;/span&gt; &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;setLong&lt;/span&gt;(Context context, String key, &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;long&lt;/span&gt; value) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SharedPreferences prefs = getPreferences(context);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SharedPreferences.Editor editor = prefs.edit();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; editor.putLong(key, value);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; editor.commit();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; /**&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* float 값 저장&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param context&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param key&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param value&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public static void&lt;/span&gt; &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;setFloat&lt;/span&gt;(Context context, String key, &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;float &lt;/span&gt;value) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SharedPreferences prefs = getPreferences(context);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SharedPreferences.Editor editor = prefs.edit();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; editor.putFloat(key, value);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; editor.commit();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; /**&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* String 값 로드&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param context&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param key&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @return&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public static&lt;/span&gt; String &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;getString&lt;/span&gt;(Context context, String key) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SharedPreferences prefs = getPreferences(context);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; String value = prefs.getString(key, DEFAULT_VALUE_STRING);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;return &lt;/span&gt;value;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; /**&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* boolean 값 로드&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param context&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param key&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @return&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public static boolean&lt;/span&gt; &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;getBoolean&lt;/span&gt;(Context context, String key) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SharedPreferences prefs = getPreferences(context);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;boolean &lt;/span&gt;value = prefs.getBoolean(key, DEFAULT_VALUE_BOOLEAN);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;return &lt;/span&gt;value;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; /**&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* int 값 로드&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param context&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param key&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @return&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public static int&lt;/span&gt; &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;getInt&lt;/span&gt;(Context context, String key) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SharedPreferences prefs = getPreferences(context);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;int &lt;/span&gt;value = prefs.getInt(key, DEFAULT_VALUE_INT);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;return &lt;/span&gt;value;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; /**&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* long 값 로드&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param context&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param key&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @return&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public static long&lt;/span&gt; &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;getLong&lt;/span&gt;(Context context, String key) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SharedPreferences prefs = getPreferences(context);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;long &lt;/span&gt;value = prefs.getLong(key, DEFAULT_VALUE_LONG);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;return &lt;/span&gt;value;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; /**&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* float 값 로드&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param context&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param key&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @return&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public static float&lt;/span&gt; &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;getFloat&lt;/span&gt;(Context context, String key) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SharedPreferences prefs = getPreferences(context);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;float &lt;/span&gt;value = prefs.getFloat(key, DEFAULT_VALUE_FLOAT);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;return &lt;/span&gt;value;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; /**&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* 키 값 삭제&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param context&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param key&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public static void&lt;/span&gt; &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;removeKey&lt;/span&gt;(Context context, String key) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SharedPreferences prefs = getPreferences(context);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SharedPreferences.Editor edit = prefs.edit();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; edit.remove(key);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; edit.commit();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; /**&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* 모든 저장 데이터 삭제&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @param context&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public static void&lt;/span&gt; &lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;clear&lt;/span&gt;(Context context) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SharedPreferences prefs = getPreferences(context);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SharedPreferences.Editor edit = prefs.edit();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; edit.clear();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; edit.commit();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;간단하게 설명을 하자면,&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;데이터를 저장 할 때는 SharedPreferences의 Editor를 이용하여, 데이터 타입에 따라 put을 해주시면 됩니다. 마지막에 &lt;span style=&quot;background-color: rgb(255, 216, 216);&quot;&gt;commit을 해야 적용&lt;/span&gt;되니 주의하시기 바랍니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;데이터를 로드 할 때는 저장할 때 사용했던 key 값을 이용하시면 됩니다. 로드 할 때, 해당 &lt;span style=&quot;background-color: rgb(255, 216, 216);&quot;&gt;key에 해당되는 데이터가 없다면 default로 설정한 값이 호출&lt;/span&gt;됩니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;그럼 실제 Activity에서 어떻게 사용하는지 예제를 통해 살펴보도록 하겠습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;&lt;b&gt;SharedPreferences&amp;nbsp;사용하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;간단하게 저장 된 데이터를 불러와 표시 할 TextView 하나만 배치하겠습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;b&gt;activity_main.xml&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;?&lt;/span&gt;xml version=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;1.0&quot;&lt;/span&gt; encoding=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;LinearLayout&lt;/span&gt; xmlns:android=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;http://schemas.android.com/apk/res/android&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; xmlns:app=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;http://schemas.android.com/apk/res-auto&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; xmlns:tools=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;http://schemas.android.com/tools&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; android:gravity=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;center&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; tools:context=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;rebuild.com.sharedpreferences.MainActivity&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;TextView&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:id=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;@+id/txt_preferences&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:textSize=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;30dp&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;/LinearLayout&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;이어, Activity를 작성하도록 하겠습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;b&gt;MainActivity.java&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;package &lt;/span&gt;rebuild.com.sharedpreferences;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import &lt;/span&gt;android.content.Context;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import &lt;/span&gt;android.os.Bundle;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import &lt;/span&gt;android.support.v7.app.AppCompatActivity;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import&lt;/span&gt; android.widget.TextView;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public class&lt;/span&gt; MainActivity &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;extends &lt;/span&gt;AppCompatActivity {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private &lt;/span&gt;Context mContext;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private &lt;/span&gt;TextView txt_preferences;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; @Override&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;protected void &lt;/span&gt;onCreate(Bundle savedInstanceState) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;super&lt;/span&gt;.onCreate(savedInstanceState);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setContentView(R.layout.activity_main);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mContext = &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;this&lt;/span&gt;;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;b&gt; String text = PreferenceManager.getString(mContext, &lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;rebuild&quot;&lt;/span&gt;);&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;if &lt;/span&gt;(text.equals(&quot;&quot;)) {&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; text = &lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;저장된 데이터가 없습니다.&quot;&lt;/span&gt;;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PreferenceManager.setString(mContext, &lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;rebuild&quot;&lt;/span&gt;, &lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;숲속의 작은 이야기&quot;&lt;/span&gt;);&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txt_preferences = (TextView) findViewById(R.id.txt_preferences);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; txt_preferences.setText(text);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;}&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;작성한 클래스를 이용해서 &quot;rebuild&quot;라는 key로 저장 된 데이터를 가져옵니다. 만약 가져온 데이터가 default 값이라면 데이터를 저장하도록 구성하였습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;최초 실행했을 때는 데이터가 없어 따로 지정한 text가 보여지겠지만, 앱을 재시작 할 경우, 저장된 값을 불러와 보여지게 되겠죠?.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;결과 확인해 보겠습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 300px; width: 300px; height: 617px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D98F415C32F78D32&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D98F415C32F78D32&quot; width=&quot;300&quot; height=&quot;617&quot; filename=&quot;exam1.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 300px; height: 617px;&quot;/&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 300px; width: 300px; height: 617px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99607A415C32F78D2C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99607A415C32F78D2C&quot; width=&quot;300&quot; height=&quot;617&quot; filename=&quot;exam2.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;width: 300px; height: 617px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;실행결과&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;좌 - 최초 실행 시 / 우 - 재 시작 시&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;이상으로 포스팅을 마치도록 하겠습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;새해에 정했던 목표들은 아직 잘 지켜나가고 계신가요? 사람이 참 부지런하기가 힘이 드네요.&lt;/p&gt;&lt;p&gt;새해가 되었다고 사람이 한 순간에 부지런히 변신하는 건 아니지만 자꾸 하려고 하면 조금씩이라도 달라지지 않을까요?... 제발....&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>프로그래밍/Android</category>
      <author>여름숲_</author>
      <guid isPermaLink="true">https://re-build.tistory.com/37</guid>
      <comments>https://re-build.tistory.com/37#entry37comment</comments>
      <pubDate>Fri, 4 Jan 2019 13:37:58 +0900</pubDate>
    </item>
    <item>
      <title>23 아이텐티티</title>
      <link>https://re-build.tistory.com/35</link>
      <description>&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/999F393A5C2D73920F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F999F393A5C2D73920F&quot; width=&quot;820&quot; height=&quot;1175&quot; filename=&quot;23.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;&lt;b&gt;Synopsis&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;b&gt;만약 그들이 자유자재로 변할 수 있다면요?&lt;/b&gt;&lt;/p&gt;&lt;p&gt;23개의 인격을 가진 남자 케빈&lt;/p&gt;&lt;p&gt;그는 언제 누가 등장할지 모르는 인격들 사이를 오가며 유일하게 자신을 이해하는&lt;/p&gt;&lt;p&gt;플레쳐 박사에게만 자신의 이야기를 꺼내 놓는다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;어느 날, 케빈은 지금까지 등장한 적 없는 24번째 인격의 지시로 3명의 소녀들을 납치하고&lt;/p&gt;&lt;p&gt;오래도록 계획했던 비밀스러운 일을 꾸민다.&lt;/p&gt;&lt;p&gt;소녀들이 그에게서 도망치려 할수록 케빈의 인격들은 점차 폭주하기 시작하는데&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그 안의 수 많은 인격 중 누가, 누구를 위해 움직이는가&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;&lt;b&gt;나도 한마디&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;이전부터 유명했던 작품이라 이미 보신 분들이 많으실 거라고 생각되는데요,&lt;/p&gt;&lt;p&gt;이번 1월에 개봉 예정인 '글래스'라는 영화와 다음 리뷰 예정인 '언브레이커블'과 같은 세계관을 공유하고 있다고 하여 다시 한번 찾아보게 된 영화입니다. 세 작품 모두 M. 나이트 사말란 감독의 작품으로 이미 전설이 되어버린 '식스센스'의 감독으로도 굉장히 유명합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;영화는 납치된 3명의 여학생들과 그를 납치한 남자의 여러 인격들, 그를 치료하기 위해 정신과 상담을 맡고 있던 플레쳐 박사의 이야기가 주가 되어 진행이 되는데요, 다소 빈약해 보일 수도 있는 구성에서&amp;nbsp;다중인격 주인공을 연기한 제임스 맥어보이의 연기가&amp;nbsp;정말 영화의 전부라고 말할 수 있을 정도로 압도적인 연기력을 보여주었습니다. 어떻게 1초만에 다른사람으로 변해 연기를 할 수 있는지 경이롭기까지 합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;개인적으로는 결말이 조금 허무했는데요,&amp;nbsp;이번 영화는 빌런의 탄생 정도로만 보고 다음 개봉 예정인 글래스에서 제대로 된 무언가를 보여주지 않을까 기대하게 됩니다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;쿠키영상도 있습니다. 전작인 언브레이커블의 주인공이 깜짝 등장하며 같은 세계관에 있다는 것을 암시하고 있는 듯 합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;후속작인 글래스를 재미있게 보기 위한 영화가 아닌, 23 아이덴티티&amp;nbsp;자체로도 굉장히 매력적인 영화입니다. 앞서 말씀드린 제임스 맥어보이의 연기력을 보기 위해서라도 이 영화는 꼭 보시길 바랍니다.!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: right;&quot;&gt;지극히 개인적인 생각으로&amp;nbsp;작성된 글입니다.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;</description>
      <author>여름숲_</author>
      <guid isPermaLink="true">https://re-build.tistory.com/35</guid>
      <comments>https://re-build.tistory.com/35#entry35comment</comments>
      <pubDate>Thu, 3 Jan 2019 11:32:32 +0900</pubDate>
    </item>
    <item>
      <title>[Android] 해상도별 레이아웃 대응에 대한 고찰</title>
      <link>https://re-build.tistory.com/34</link>
      <description>&lt;p&gt;&lt;/p&gt;&lt;p&gt;이번에는 여러가지 해상도를 가진 기기에 어떻게 하면 손쉽고 편하게 대응이 가능할 지에 대한 개인적인 고찰을 해보려 합니다.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;혹시 더 좋은 방법을 아시는 분이나 아이디어가 있으신 분은 댓글로 알려주신다면 정말 감사하겠습니다.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99CAE53D5BCFE3C90F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99CAE53D5BCFE3C90F&quot; width=&quot;820&quot; height=&quot;393&quot; filename=&quot;android_device.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;안드로이드 기기들을 보면 정말 다양한 화면 사이즈를 가지고 있습니다. 개발을 진행하시게 되면 항상 고려해야 하는 부분 중의 하나가 이런 여러가지 기기들에 대해 어떻게&amp;nbsp;대응을 할 것인가? 일텐데요. 오늘은 이렇게 여러 화면에 대해 어떻게 대응하면 좋을지, 어떻게 하면 좀 더 손쉽게 관리가 가능할 지에 대해 개인적인 생각을 늘어볼 생각입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;&lt;b&gt;레이아웃의 세분화&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;첫 번째로 각 기기에 대한 레이아웃 파일을 세분화하여 관리하는 방법입니다.&lt;/p&gt;&lt;p&gt;기기마다 레이아웃을 만들어야 한다면 화면 하나에 수백개의 레이아웃을 만들어야겠죠? 물론 그렇게 하면 엄청나게 비효율적이고, 관리 또한 엄청나게 어려워지겠죠. 그래서 &lt;span style=&quot;background-color: rgb(255, 216, 216);&quot;&gt;안드로이드에서는 크기, 해상도, 방향 등으로&amp;nbsp;일반화하여 대응이 가능하도록 지원&lt;/span&gt;하고 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;ul style=&quot;margin-bottom: 0px;&quot;&gt;&lt;li&gt;&lt;p style=&quot;padding: 0px;&quot;&gt;&lt;b&gt;화면 밀도&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;padding: 0px; margin-left: 2em;&quot;&gt;- 화면 공간 안의 픽셀 개수, dpi(dots per inch)에 따라 분류합니다.&lt;/p&gt;&lt;p style=&quot;padding: 0px; margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;784&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; 맑은=&quot;&quot; 고딕&quot;,=&quot;&quot; sans-serif;font-size:13px&quot;=&quot;&quot; style=&quot;border: none; border-collapse: collapse;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 37px; height: 24px; border-width: 1px; border-style: none; border-color: rgb(255, 0, 0);&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 127px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0); border-top: 1px none rgb(255, 0, 0);&quot;&gt;&lt;p&gt;&amp;nbsp;ldpi&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 620px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0); border-top: 1px none rgb(255, 0, 0);&quot;&gt;&lt;p&gt;저밀도(120dpi) 화면에 해당합니다.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width: 37px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0); border-left: 1px none rgb(255, 0, 0);&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 127px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0);&quot;&gt;&lt;p&gt;&amp;nbsp;mdpi&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 620px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0);&quot;&gt;&lt;p&gt;중밀도(160dpi) 화면에 해당합니다.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width: 37px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0); border-left: 1px none rgb(255, 0, 0);&quot; rowspan=&quot;1&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 127px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0);&quot; rowspan=&quot;1&quot;&gt;&lt;p&gt;&amp;nbsp;hdpi&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 620px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0);&quot; rowspan=&quot;1&quot;&gt;&lt;p&gt;고밀도(240dpi) 화면에 해당합니다.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width: 37px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0); border-left: 1px none rgb(255, 0, 0);&quot; rowspan=&quot;1&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 127px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0);&quot; rowspan=&quot;1&quot;&gt;&lt;p&gt;&amp;nbsp;xhdpi&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 620px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0);&quot; rowspan=&quot;1&quot;&gt;&lt;p&gt;초고밀도(320dpi) 화면에 해당합니다.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width: 37px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0); border-left: 1px none rgb(255, 0, 0);&quot; rowspan=&quot;1&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 127px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0);&quot; rowspan=&quot;1&quot;&gt;&amp;nbsp;xxhdpi&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 620px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0);&quot; rowspan=&quot;1&quot;&gt;&lt;p&gt;초초고밀도(480dpi) 화면에 해당합니다.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width: 37px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0); border-left: 1px none rgb(255, 0, 0);&quot; rowspan=&quot;1&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 127px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0);&quot; rowspan=&quot;1&quot;&gt;&lt;p&gt;&amp;nbsp;xxxhdpi&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 620px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0);&quot; rowspan=&quot;1&quot;&gt;&lt;p&gt;초초초고밀도(640dpi) 화면에 해당합니다.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;padding: 0px; margin-left: 2em;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p style=&quot;padding: 0px; margin-left: 2em;&quot;&gt;-&amp;nbsp; 기기의 dpi가&amp;nbsp;기준 되는 dpi와 정확하게 맞아야 하는 것은 아닙니다.&amp;nbsp;기기의 dpi와 가장 비슷한 레이아웃으로&lt;/p&gt;&lt;p style=&quot;padding: 0px; margin-left: 2em;&quot;&gt;&amp;nbsp; &amp;nbsp;자동으로&amp;nbsp;찾아갑니다. 이때 고밀도에서 저밀도&amp;nbsp;순으로 우선순위가 정해집니다.&lt;/p&gt;&lt;p style=&quot;padding: 0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0px;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;최소 너비&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;padding: 0px; margin-left: 2em;&quot;&gt;- 사용 가능한 화면 영역의 가장 짧은 치수를 기준으로 분류합니다.&lt;/p&gt;&lt;p style=&quot;padding: 0px; margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;784&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; 맑은=&quot;&quot; 고딕&quot;,=&quot;&quot; sans-serif;font-size:13px&quot;=&quot;&quot; style=&quot;border: none; border-collapse: collapse;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 37px; height: 24px; border-width: 1px; border-style: none; border-color: rgb(255, 0, 0);&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 128px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0); border-top: 1px none rgb(255, 0, 0);&quot;&gt;&lt;p&gt;&amp;nbsp;sw&amp;lt;N&amp;gt;dp&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 619px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0); border-top: 1px none rgb(255, 0, 0);&quot;&gt;&lt;p&gt;사용 예 : sw320dp, sw600dp, sw720dp&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- 예를 들어, sw600dp로 분류된 레이아웃은 화면의 사용 가능한 영역 중, 가로 또는 세로 중 짧은 치수를 기준으로&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&amp;nbsp; 600dp가 넘는 경우에만 접근이 가능하도록 합니다.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0px;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;사용 가능한 화면 너비 또는 높이&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;padding: 0px; margin-left: 2em;&quot;&gt;- 사용 가능한 최소 너비 또는 높이를 기준으로 분류합니다.&lt;/p&gt;&lt;p style=&quot;padding: 0px; margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;784&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; 맑은=&quot;&quot; 고딕&quot;,=&quot;&quot; sans-serif;font-size:13px&quot;=&quot;&quot; style=&quot;border: none; border-collapse: collapse;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 37px; height: 24px; border-width: 1px; border-style: none; border-color: rgb(255, 0, 0);&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 128px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0); border-top: 1px none rgb(255, 0, 0);&quot;&gt;&lt;p&gt;&amp;nbsp;w&amp;lt;N&amp;gt;dp&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 619px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0); border-top: 1px none rgb(255, 0, 0);&quot;&gt;&lt;p&gt;최소 사용 가능 너비를 dp로 지정합니다.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width: 37px; height: 23px; border-width: 1px; border-style: none; border-color: rgb(255, 0, 0);&quot; rowspan=&quot;1&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 128px; height: 23px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0); border-top: 1px none rgb(255, 0, 0);&quot; rowspan=&quot;1&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 619px; height: 23px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0); border-top: 1px none rgb(255, 0, 0);&quot; rowspan=&quot;1&quot;&gt;사용 예 : w720dp, w1024dp&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width: 37px; height: 24px; border-width: 1px; border-style: none; border-color: rgb(255, 0, 0);&quot; rowspan=&quot;1&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 128px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0); border-top: 1px none rgb(255, 0, 0);&quot; rowspan=&quot;1&quot;&gt;&amp;nbsp;h&amp;lt;N&amp;gt;dp&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 619px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0); border-top: 1px none rgb(255, 0, 0);&quot; rowspan=&quot;1&quot;&gt;최소 사용 가능 높이를 dp로 지정합니다.&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width: 37px; height: 24px; border-width: 1px; border-style: none; border-color: rgb(255, 0, 0);&quot; rowspan=&quot;1&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 128px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0); border-top: 1px none rgb(255, 0, 0);&quot; rowspan=&quot;1&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 619px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0); border-top: 1px none rgb(255, 0, 0);&quot; rowspan=&quot;1&quot;&gt;&lt;p&gt;사용 예 : h720dp, h1024dp&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- 이전에 사용하던 화면 크기에 따른 분류(small, normal, large, xlarge)를 대체하여 사용하도록 권장되고 있습니다.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&amp;nbsp; 지정된 dp를 기준으로 가로 또는 높이가 기준 dp보다 높을 경우에만 접근이 가능하도록 합니다.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- 흔히 이 방법은 가로 모드와&amp;nbsp;세로 모드가&amp;nbsp;다른 레이아웃에&amp;nbsp;대응하기 위해 사용하기도 합니다.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0px;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;화면 방향&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;padding: 0px; margin-left: 2em;&quot;&gt;- 화면 방향에 따라 분류합니다.&lt;/p&gt;&lt;p style=&quot;padding: 0px; margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;784&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; 맑은=&quot;&quot; 고딕&quot;,=&quot;&quot; sans-serif;font-size:13px&quot;=&quot;&quot; style=&quot;border: none; border-collapse: collapse;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 37px; height: 23px; border-width: 1px; border-style: none; border-color: rgb(255, 0, 0);&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 128px; height: 23px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0); border-top: 1px none rgb(255, 0, 0);&quot;&gt;&lt;p&gt;&amp;nbsp;port&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 619px; height: 23px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0); border-top: 1px none rgb(255, 0, 0);&quot;&gt;&lt;p&gt;세로 모드에 해당합니다.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width: 37px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0); border-left: 1px none rgb(255, 0, 0);&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 128px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0);&quot;&gt;&lt;p&gt;&amp;nbsp;land&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 619px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0);&quot;&gt;&lt;p&gt;가로 모드에 해당합니다.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이외에도 몇 가지 분류 방법이 더 있지만, 많이 쓰이는 것들만 정리해보았습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;프로젝트에 적용하기 위해서는 res폴더 아래에 제한자를 포함하여 폴더를 생성하시면 되며, 여러개의 제한자를 사용하여 생성하셔도 무방합니다. 각 제한자의 구분은 - 기호를 사용하시면 됩니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 338px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99E3AC375BD12CFB3C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99E3AC375BD12CFB3C&quot; width=&quot;338&quot; height=&quot;410&quot; filename=&quot;res.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;layout 폴더 생성 예&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;&lt;b&gt;레이아웃 세분화의 장단점&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;위와 같이 레이아웃 세분화 시에 어떤 장단점이 있을까요?&amp;nbsp;&lt;/p&gt;&lt;p&gt;저는 가장 큰 장점이라면 역시 이번 포스팅 주제인 &lt;span style=&quot;background-color: rgb(255, 216, 216);&quot;&gt;여러 기기에 대응이 가능하다&lt;/span&gt;는 점이라고 생각합니다. 여러 기기의 화면이 다름에도 같은 비율의 이미지들과 글자들을 사용하여 핸드폰, 태블릿 등을 같은 화면처럼 표현 할 수도 있고, 또는 핸드폰과 태블릿 등을 구분하여 다르게 구성할 수도 있겠죠.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그럼 반대로 단점으로는 어떤 점이 있을까요?&lt;/p&gt;&lt;p&gt;사실 이 글을 쓰게 된 이유이기도 한 &lt;span style=&quot;background-color: rgb(255, 216, 216);&quot;&gt;관리가 힘들다&lt;/span&gt;는 점이었습니다. 유지보수 또는 추가 기능 등으로 인해 레이아웃이 바뀌게 된다면 세분화되어있는 모든 레이아웃을 수정해야만 합니다. 생각만 해도 끔찍하시죠? 네 저도 그렇습니다...&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;&lt;b&gt;해상도별 레이아웃 대응에 대한&amp;nbsp;고찰&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;여러기기에 대응하기 위해 레이아웃을 세분화하는 방법은 유지보수 및 관리적 측면에서 보았을 때, 너무 비효율적인 일이라고 생각됩니다. 하여, 레이아웃 작업을 최소화 할 수 있도록 하는 방법이 뭐가 있을까 생각하다가 찾은 것이 dimens.xml을 이용하는 방법인데요,&lt;span style=&quot;background-color: rgb(255, 216, 216);&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);&quot;&gt; &lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);&quot;&gt;레이아웃은 하나로 통일시키고 dimens.xml을 세분화 하여 사용&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;하는 방법입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;다음과 같이 레이아웃을 통일되게 꾸미고,&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;&lt;b&gt;activity)main.xml&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;?&lt;/span&gt;xml version=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;1.0&quot;&lt;/span&gt; encoding=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;LinearLayout&lt;/span&gt; xmlns:android=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;http://schemas.android.com/apk/res/android&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; xmlns:app=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;http://schemas.android.com/apk/res-auto&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; xmlns:tools=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;http://schemas.android.com/tools&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; android:gravity=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;center&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; android:orientation=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;vertical&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; tools:context=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;rebuild.com.layoutdimens.MainActivity&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;ImageView&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;android:layout_width=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;@dimen/imageWidth&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;@dimen/imageHeight&quot;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:background=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;@color/colorAccent&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;TextView&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;android:layout_marginTop=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;@dimen/topMargin&quot;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:text=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;Dimens-!!&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;android:textSize=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;@dimen/textSize&quot;&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;/LinearLayout&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;dimens.xml은 레이아웃 세분화 할 때와 마찬가지로 생성하시면 되는데 이번에는 values폴더 안에 생성해주시면 되겠습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;819&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border: none; border-collapse: collapse; width: 819px;&quot; 맑은=&quot;&quot; 고딕&quot;,=&quot;&quot; sans-serif;font-size:13px&quot;=&quot;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 316px; height: 24px; border-width: 0px 1px 0px 0px; border-style: none dashed none none; border-right-color: rgb(189, 189, 189);&quot;&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; line-height: 0.5;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 289px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99ACA3475BD29A4B17&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99ACA3475BD29A4B17&quot; width=&quot;289&quot; height=&quot;403&quot; filename=&quot;dimens.png&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 502px; height: 24px; border-bottom: 1px dashed rgb(189, 189, 189); border-right: 1px dashed rgb(189, 189, 189); border-top: 1px dashed rgb(189, 189, 189); background-color: rgb(234, 234, 234);&quot;&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;dimens.xml&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;?&lt;/span&gt;xml version=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;1.0&quot;&lt;/span&gt; encoding=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;resources&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;dimen&lt;/span&gt; name=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;imageWidth&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;gt;&lt;/span&gt;40dp&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;/dimen&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;dimen&lt;/span&gt; name=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;imageHeight&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;gt;&lt;/span&gt;20dp&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;/dimen&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;dimen&lt;/span&gt; name=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;textSize&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;gt;&lt;/span&gt;12dp&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;/dimen&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;dimen&lt;/span&gt; name=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;topMargin&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;gt;&lt;/span&gt;5dp&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;/dimen&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;/resources&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;이미지 사이즈 또는 텍스트 크기 등 기기의 해상도에 따라 변해야 하는 수치들을 각 해상도에 해당하는&amp;nbsp;dimens.xml에 정의하고 불러와 사용하도록 하였습니다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;이렇게 사용할 경우, 통합된 레이아웃을 사용하기 때문에&amp;nbsp;UI의 수정이 필요한 경우 레이아웃은 한번만 수정한 뒤, &lt;b&gt;각 해상도에 따라 dimens.xml에서 수치만 변경&lt;/b&gt;해주면 되기 때문에 유지보수 및 관리 측면에서 한결 간편하게 사용이 가능합니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;제 개인적인 생각으로 정리해보았는데, 이게 꼭 정답이라는 말은 아닙니다.&lt;/p&gt;&lt;p&gt;좀 더 좋은 의견 있으시면 댓글 달아주시면 감사하겠습니다.!&lt;/p&gt;&lt;p&gt;&lt;/p&gt;</description>
      <category>프로그래밍/Android</category>
      <author>여름숲_</author>
      <guid isPermaLink="true">https://re-build.tistory.com/34</guid>
      <comments>https://re-build.tistory.com/34#entry34comment</comments>
      <pubDate>Tue, 23 Oct 2018 18:31:47 +0900</pubDate>
    </item>
    <item>
      <title>[Android] FloatingActionButton 사용하기</title>
      <link>https://re-build.tistory.com/31</link>
      <description>&lt;p&gt;&lt;/p&gt;&lt;p&gt;오늘 주제는 FloatingActionButton입니다.&lt;/p&gt;&lt;p&gt;뭔지 잘 모르시겠다구요? FloatingActionButton이 무엇인지, 어떻게 사용하는지 하나하나 설명 드릴테니, 잘 따라오시기바랍니다.&lt;/p&gt;&lt;p&gt;그럼 포스팅 시작하도록 하겠습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 300px; text-align: center; width: 300px; height: 617px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9931C5455BC444450F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9931C5455BC444450F&quot; width=&quot;300&quot; height=&quot;617&quot; filename=&quot;Screenshot_20181015-160535_FloatingActionButton.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center; width: 300px; height: 617px;&quot;/&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 300px; text-align: center; width: 300px; height: 617px;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99E541455BC4444516&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99E541455BC4444516&quot; width=&quot;300&quot; height=&quot;617&quot; filename=&quot;Screenshot_20181015-160542_FloatingActionButton.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center; width: 300px; height: 617px;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;FloatingActionButton 사용 예&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;앱을 사용하시다 보면 위와 같은 버튼을 보신 적 있으실 텐데요, 위의 버튼을 FloatingActionButton(이하 fab)이라고 합니다. 특히나 리스트뷰 같은 구조에서 많이 사용되는데요, 화면이 움직이더라도 &lt;span style=&quot;background-color: rgb(255, 216, 216);&quot;&gt;fab 버튼은 &lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 216, 216);&quot;&gt;화면의 최상위에 고정&lt;/span&gt;되어 떠있는 것을 보실 수 있습니다.&lt;/p&gt;&lt;p&gt;그럼 fab 버튼을 추가하고, 위의 사진에서처럼 서브 버튼이 나타났다가 사라지도록 구성하는 방법에 대해 예제를 통해 알아보도록 하겠습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;&lt;b&gt;Gradle에 라이브러리 추가하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;FloationgActionButton은 Support Design Library에 소속되어 있으므로, Gradle에 라이브러리를 추가해주어야 합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;orphans: 2; text-align: start; text-indent: 0px; widows: 2; text-decoration-style: initial; text-decoration-color: initial; border-style: dashed; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; margin-top: 0px; margin-bottom: 0px;&quot;&gt;&lt;b&gt;build.gradle (Module: app)&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; font-weight: 400; margin-top: 0px; margin-bottom: 0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; font-weight: 400; margin-top: 0px; margin-bottom: 0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;&quot;&gt;dependencies {&lt;/p&gt;&lt;p style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;implementation 'com.android.support:design:26.1.0'&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;&quot;&gt;}&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이제 fab버튼을 사용하실 수 있습니다. 이어서 MainActivity의 레이아웃을 구성하도록 하겠습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;&lt;b&gt;레이아웃&amp;nbsp;작성하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;우선, 레이아웃부터 작성하도록 하겠습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;&lt;b&gt;activity_main.xml&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;?&lt;/span&gt;xml version=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;1.0&quot;&lt;/span&gt; encoding=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;RelativeLayout&lt;/span&gt; xmlns:android=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;http://schemas.android.com/apk/res/android&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; xmlns:app=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;http://schemas.android.com/apk/res-auto&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; xmlns:tools=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;http://schemas.android.com/tools&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;match_parent&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; tools:context=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;rebuild.com.floatingactionbutton.MainActivity&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;TextView&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_centerInParent=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:text=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;숲속의 작은이야기 입니다.\nhttp://re-build.tistory.com&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:textAlignment=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;center&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:textColor=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;#000000&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:textSize=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;20dp&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;android.support.design.widget.FloatingActionButton&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:id=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;@+id/fab_sub1&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_above=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;@+id/fab_sub2&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_alignParentRight=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_marginBottom=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;15dp&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_marginRight=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;20dp&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:backgroundTint=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;#ffffff&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:src=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;@drawable/ic_camera&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:visibility=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;invisible&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; app:borderWidth=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;0dp&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; app:fabSize=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;normal&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;android.support.design.widget.FloatingActionButton&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:id=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;@+id/fab_sub2&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_above=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;@+id/fab_main&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_alignParentRight=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_marginBottom=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;15dp&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_marginRight=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;20dp&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:backgroundTint=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;#ffffff&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:src=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;@drawable/ic_map&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:visibility=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;invisible&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; app:borderWidth=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;0dp&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; app:fabSize=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;normal&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;android.support.design.widget.FloatingActionButton&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:id=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;@+id/fab_main&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_width=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_height=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;wrap_content&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_alignParentBottom=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_alignParentRight=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_marginBottom=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;20dp&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:layout_marginRight=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;20dp&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:backgroundTint=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;#009688&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:src=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;@drawable/ic_add&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; app:borderWidth=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;0dp&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; app:fabSize=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;normal&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;/RelativeLayout&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;우측 하단에 fab 버튼을 배치하고 버튼을 눌렀을 때, 나올 서브 fab 버튼들을 위쪽으로 배치했습니다. fab 버튼을 사용하실 때 많이 사용하게 되는 옵션들이 몇 가지 있습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;ul style=&quot;margin-bottom: 0px;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;src&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- fab 버튼의 아이콘을 지정할 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0px;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;backgroundTint&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- fab 버튼의 색상을 변경 할 수 있습니다.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&amp;nbsp; 기본적으로 fab 버튼의 색상은 colors.xml에 정의된 colorAccent의 색상으로 지정되어있습니다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0px;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;fabSize&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;padding: 0px; margin-left: 2em;&quot;&gt;- fab버튼의 사이즈를 선택할 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;784&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; 맑은=&quot;&quot; 고딕&quot;,=&quot;&quot; sans-serif;font-size:13px&quot;=&quot;&quot; style=&quot;border: none; border-collapse: collapse;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 37px; height: 24px; border-width: 1px; border-style: none; border-color: rgb(255, 0, 0);&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 128px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0); border-top: 1px none rgb(255, 0, 0);&quot;&gt;&lt;p&gt;&amp;nbsp;&quot;mini&quot;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 619px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0); border-top: 1px none rgb(255, 0, 0);&quot;&gt;&lt;p&gt;&amp;nbsp;fab 버튼의 사이즈를&amp;nbsp;mini 사이즈로 지정합니다.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width: 37px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0); border-left: 1px none rgb(255, 0, 0);&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 128px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0);&quot;&gt;&lt;p&gt;&amp;nbsp;&quot;normal&quot;&lt;/p&gt;&lt;/td&gt;&lt;td style=&quot;width: 619px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0);&quot;&gt;&lt;p&gt;&amp;nbsp;fab 버튼의 사이즈를 normal 사이즈로 지정합니다.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;width: 37px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0); border-left: 1px none rgb(255, 0, 0);&quot; rowspan=&quot;1&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;td style=&quot;width: 128px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0);&quot; rowspan=&quot;1&quot;&gt;&amp;nbsp;&quot;auto&quot;&lt;/td&gt;&lt;td style=&quot;width: 619px; height: 24px; border-bottom: 1px none rgb(255, 0, 0); border-right: 1px none rgb(255, 0, 0);&quot; rowspan=&quot;1&quot;&gt;&lt;p&gt;&amp;nbsp;fab 버튼의 사이즈를 화면 사이즈에 맞추어 자동으로 mini 또는 normal롤 지정합니다.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul style=&quot;margin-bottom: 0px;&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;b&gt;borderWidth&lt;/b&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- fab 버튼의 테두리 두께를 지정합니다.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이외의 다른 옵션들도&amp;nbsp;적용해보면서&amp;nbsp;어떤 효과를 내는지 알아두시면 좋을 것 같습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;&lt;b&gt;애니메이션 정의하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;이어서 fab 버튼이 나타나고 사라지는 효과를 주기 위해 애니메이션을 만들어 보겠습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-top: 0px; margin-bottom: 0px; color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot;&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;orphans: 2; text-align: start; text-indent: 0px; widows: 2; text-decoration-style: initial; text-decoration-color: initial; border-style: dashed; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; margin-top: 0px; margin-bottom: 0px;&quot;&gt;&lt;b&gt;fab_open.xml&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; margin-top: 0px; margin-bottom: 0px;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(0, 0, 0); font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 13px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; margin-top: 0px; margin-bottom: 0px;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;?&lt;/span&gt;xml version=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;1.0&quot;&lt;/span&gt; encoding=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;set&lt;/span&gt; xmlns:android=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;http://schemas.android.com/apk/res/android&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; android:fillAfter=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;scale&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:duration=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;300&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:fromXScale=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;0.0&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:fromYScale=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;0.0&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:interpolator=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;@android:anim/linear_interpolator&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:pivotX=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;50%&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:pivotY=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;50%&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:toXScale=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;0.8&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:toYScale=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;0.8&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;alpha&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:duration=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;300&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:fromAlpha=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;0.0&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:interpolator=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;@android:anim/accelerate_interpolator&quot;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:toAlpha=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;1.0&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt; /&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;/set&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;&lt;b&gt;fab_close.xml&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;?&lt;/span&gt;xml version=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;1.0&quot;&lt;/span&gt; encoding=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;set&lt;/span&gt; xmlns:android=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;http://schemas.android.com/apk/res/android&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; android:fillAfter=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;scale&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:duration=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;300&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:fromXScale=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;0.8&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:fromYScale=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;0.8&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:interpolator=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;@android:anim/linear_interpolator&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:pivotX=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;50%&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:pivotY=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;50%&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:toXScale=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;0.0&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:toYScale=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;0.0&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;alpha&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:duration=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;300&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:fromAlpha=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;1.0&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:interpolator=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;@android:anim/accelerate_interpolator&quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; android:toAlpha=&lt;span style=&quot;color: rgb(0, 51, 153);&quot;&gt;&quot;0.0&quot;&lt;/span&gt; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;lt;/set&amp;gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;애니메이션에 관한 내용은 다음 포스팅에서 다룰 예정이니 자세한 설명은 생략하도록 하겠습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;이제 모든 준비가 끝났으니, Activity에서 fab 버튼의 동작을 정의하도록 하겠습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;&lt;b&gt;FloatingActionButton 사용하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;작성 된 애니메이션을 적용하여, fab 버튼의 동작을 정의하도록 하겠습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;&lt;b&gt;MainActivity.java&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;package &lt;/span&gt;rebuild.com.floatingactionbutton;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import&lt;/span&gt; android.content.Context;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import &lt;/span&gt;android.os.Bundle;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import &lt;/span&gt;android.support.design.widget.FloatingActionButton;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import &lt;/span&gt;android.support.v7.app.AppCompatActivity;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import &lt;/span&gt;android.view.View;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import &lt;/span&gt;android.view.animation.Animation;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import&lt;/span&gt; android.view.animation.AnimationUtils;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import &lt;/span&gt;android.widget.Toast;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;class&lt;/span&gt; MainActivity &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;extends &lt;/span&gt;AppCompatActivity &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;implements &lt;/span&gt;View.OnClickListener {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private &lt;/span&gt;Context mContext;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private &lt;/span&gt;FloatingActionButton fab_main, fab_sub1, fab_sub2;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private &lt;/span&gt;Animation fab_open, fab_close;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;boolean &lt;/span&gt;isFabOpen = &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;false&lt;/span&gt;;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; @Override&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;protected &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;void &lt;/span&gt;onCreate(Bundle savedInstanceState) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;super&lt;/span&gt;.onCreate(savedInstanceState);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setContentView(R.layout.activity_main);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mContext = getApplicationContext();&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fab_open = AnimationUtils.loadAnimation(mContext, R.anim.fab_open);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fab_close = AnimationUtils.loadAnimation(mContext, R.anim.fab_close);&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fab_main = (FloatingActionButton) findViewById(R.id.fab_main);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fab_sub1 = (FloatingActionButton) findViewById(R.id.fab_sub1);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fab_sub2 = (FloatingActionButton) findViewById(R.id.fab_sub2);&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fab_main.setOnClickListener(&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;this&lt;/span&gt;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fab_sub1.setOnClickListener(&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;this&lt;/span&gt;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fab_sub2.setOnClickListener(&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;this&lt;/span&gt;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; @Override&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;void &lt;/span&gt;onClick(View v) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;switch &lt;/span&gt;(v.getId()) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;case &lt;/span&gt;R.id.fab_main:&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; toggleFab();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;break&lt;/span&gt;;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;case &lt;/span&gt;R.id.fab_sub1:&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; toggleFab();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Toast.makeText(this, &quot;Camera Open-!&quot;, Toast.LENGTH_SHORT).show();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;break&lt;/span&gt;;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;case &lt;/span&gt;R.id.fab_sub2:&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; toggleFab();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Toast.makeText(this, &quot;Map Open-!&quot;, Toast.LENGTH_SHORT).show();&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;break&lt;/span&gt;;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;void &lt;/span&gt;toggleFab() {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;if &lt;/span&gt;(isFabOpen) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fab_main.setImageResource(R.drawable.ic_add);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fab_sub1.startAnimation(fab_close);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fab_sub2.startAnimation(fab_close);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fab_sub1.setClickable(&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;false&lt;/span&gt;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fab_sub2.setClickable(&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;false&lt;/span&gt;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; isFabOpen = &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;false&lt;/span&gt;;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;else &lt;/span&gt;{&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fab_main.setImageResource(R.drawable.ic_close);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fab_sub1.startAnimation(fab_open);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fab_sub2.startAnimation(fab_open);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fab_sub1.setClickable(&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;true&lt;/span&gt;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fab_sub2.setClickable(&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;true&lt;/span&gt;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; isFabOpen = &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;true&lt;/span&gt;;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;fab 버튼 클릭 시에 toggleFab() 메서드를 실행시켜 애니메이션 효과를 시작하도록 정의하였습니다. 어려운 내용은 없으니, 따라 해보신다면 바로 이해가 되실거라 생각 됩니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;여기까지 하셨다면 실행시켜 결과를 확인해 보시면 되겠습니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;간단하게 FloatingActionButton에 대해 알아보았는데요, 도움이 되셨나요?&lt;/p&gt;&lt;p&gt;요즘은 Fab 버튼이 많이 사라지고 있는 추세이긴 하나, 특정 상황에서는 꽤 쓸모 있게 사용이 가능한 유용한 기능입니다.&lt;/p&gt;&lt;p&gt;하나하나 알아둘수록 차후에 UI 설계등에서도 시야가 넓어지지 않을까요?ㅎ&amp;nbsp;&lt;/p&gt;&lt;p&gt;이번 포스팅은 여기서 마치도록 하겠습니다. 읽어주셔서 감사합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;</description>
      <category>프로그래밍/Android</category>
      <author>여름숲_</author>
      <guid isPermaLink="true">https://re-build.tistory.com/31</guid>
      <comments>https://re-build.tistory.com/31#entry31comment</comments>
      <pubDate>Mon, 15 Oct 2018 16:23:24 +0900</pubDate>
    </item>
    <item>
      <title>[Android] Custom EventListener 사용하기</title>
      <link>https://re-build.tistory.com/29</link>
      <description>&lt;p&gt;&lt;/p&gt;&lt;p&gt;오늘 포스팅 주제는 커스텀 리스너 사용법에 관한 이야기 인데요, 일반적으로 사용하는 리스너 외에 원하는 형태와 상황에 맞추어 사용 가능하도록 커스텀 리스너를 생성하여 사용하는 법을 알아보고자 합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote class=&quot;tx-quote-tistory&quot;&gt;&lt;p&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;&lt;b&gt;Custom Listener 사용하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;이번 예제는 이전에 'Dialog 사용하기' 예제를 조금 수정하여 진행할 예정이기 때문에 예제를 따라하길 원하시는 분은 이전 포스팅의 내용을 먼저 작성하신 후에 보시면 되겠습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(121, 165, 228); background-color: rgb(219, 232, 251); padding: 10px;&quot;&gt;&lt;p&gt;&lt;b&gt;Dialog 사용하기&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://re-build.tistory.com/27&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;http://re-build.tistory.com/27&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;예제에서는 MainActivity에서 Dialog의 버튼 클릭 이벤트에 대한 리스너를 달아, MainActivity에서 후 처리를 할 수 있도록 리스너를 구성해보도록 하겠습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;&lt;b&gt;EndDialog.java&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;package &lt;/span&gt;rebuild.com.dialog;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import &lt;/span&gt;android.app.Dialog;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import &lt;/span&gt;android.content.Context;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import &lt;/span&gt;android.os.Bundle;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import &lt;/span&gt;android.support.annotation.NonNull;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import &lt;/span&gt;android.view.View;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import &lt;/span&gt;android.widget.TextView;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;class &lt;/span&gt;EndDialog &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;extends &lt;/span&gt;Dialog &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;implements &lt;/span&gt;View.OnClickListener {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private &lt;/span&gt;Context mContext;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private &lt;/span&gt;TextView btn_cancel;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private &lt;/span&gt;TextView btn_ok;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;&amp;nbsp; &amp;nbsp; private&amp;nbsp;&lt;/span&gt;OnDialogButtonClickListener mOnDialogButtonClickListener;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;interface&lt;/span&gt; OnDialogButtonClickListener {&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;void &lt;/span&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;onDialogButtonClick&lt;/span&gt;(View view);&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; }&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;void &lt;/span&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;setOnDialogButtonClickListener&lt;/span&gt;(OnDialogButtonClickListener mListener) {&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mOnDialogButtonClickListener = mListener;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; }&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;EndDialog&lt;/span&gt;(@NonNull Context context) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;super&lt;/span&gt;(context);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mContext = context;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; @Override&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;protected &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;void &lt;/span&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;onCreate&lt;/span&gt;(Bundle savedInstanceState) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;super&lt;/span&gt;.onCreate(savedInstanceState);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setContentView(R.layout.dialog_end);&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; btn_cancel = (TextView) findViewById(R.id.btn_cancel);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; btn_ok = (TextView) findViewById(R.id.btn_ok);&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; btn_cancel.setOnClickListener(&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;this&lt;/span&gt;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; btn_ok.setOnClickListener(&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;this&lt;/span&gt;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; @Override&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;void &lt;/span&gt;&lt;span style=&quot;color: rgb(241, 95, 95);&quot;&gt;onClick&lt;/span&gt;(View v) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;mOnDialogButtonClickListener.onDialogButtonClick(v);&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;소스만 보시고는 잘 이해가 되지 않으시겠죠?&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;먼저, EventListener를 인터페이스로 작성을 해주어야 합니다. 인터페이스 내에 작성되는 함수는&amp;nbsp;여러 개 생성하셔도 되며, 파라미터 또한 원하시는 데이터의 형태로 작성하시면 되겠습니다. 다만, 작성된 함수들은 인터페이스를 사용하는 클래스에 모두 구현이 되어야 하므로, 여러 클래스에서 사용하게 될 경우, 불필요하게 작성되지 않도록 주의해주시기 바랍니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;인터페이스 작성이 모두 끝나셨다면, 작성된 인터페이스를 변수로 만들어주시면 됩니다. 이후에, 외부에서 인터페이스를 사용할 수 있도록 setEventListener(EventListener listener)를 달아주시면 됩니다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;설명하다 보니 글이 길어졌는데요.&amp;nbsp;간단하게 요약하면,&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;1. EventListener를 인터페이스로 정의한다.&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;2. 정의된 인터페이스를 변수로 선언한다.&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;3. setOnEvnetListener(EventListener listener)를 작성한다.&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;위의 예제에서는 다이얼로그의 버튼이 클릭 되었을 때, 인터페이스의 onDialogButtonClick() 함수에 View 정보를 넘겨주고 있습니다. 그럼 MainActivity에서 어떻게 처리를 해야 할지 보도록 하겠습니다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: dashed; border-width: 1px; border-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;MainActivity.java&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;package&lt;/span&gt; rebuild.com.dialog;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import &lt;/span&gt;android.content.Context;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import &lt;/span&gt;android.os.Bundle;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import &lt;/span&gt;android.support.v7.app.AppCompatActivity;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import &lt;/span&gt;android.view.View;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;import &lt;/span&gt;android.widget.Button;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;class &lt;/span&gt;MainActivity &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;extends &lt;/span&gt;AppCompatActivity &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;implements &lt;/span&gt;View.OnClickListener, EndDialog.OnDialogButtonClickListener {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private &lt;/span&gt;Context mContext;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private &lt;/span&gt;Button btn_end;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;private &lt;/span&gt;EndDialog mEndDialog;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; @Override&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;protected &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;void &lt;/span&gt;onCreate(Bundle savedInstanceState) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;super&lt;/span&gt;.onCreate(savedInstanceState);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; setContentView(R.layout.activity_main);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; btn_end = (Button) findViewById(R.id.btn_finish);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; btn_end.setOnClickListener(this);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; @Override&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;void &lt;/span&gt;onClick(View v) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;switch &lt;/span&gt;(v.getId()) {&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;case&lt;/span&gt; R.id.btn_finish:&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mEndDialog = new EndDialog(this);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;b&gt;mEndDialog.setOnDialogButtonClickListener(this);&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mEndDialog.setCancelable(false);&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mEndDialog.show();&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;break&lt;/span&gt;;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;b&gt;@Override&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;public &lt;/span&gt;&lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;void &lt;/span&gt;onDialogButtonClick(View view) {&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;switch &lt;/span&gt;(view.getId()) {&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;case &lt;/span&gt;R.id.btn_cancel:&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mEndDialog.dismiss();&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;break&lt;/span&gt;;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;case &lt;/span&gt;R.id.btn_ok:&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; finish();&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: rgb(152, 0, 0);&quot;&gt;break&lt;/span&gt;;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; }&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;}&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;다이얼로그 호출 시에 아까 만들었던 setEventListener를 통해 리스너를 등록해주시면 됩니다. 리스너를 등록하면, 인터페이스에 정의하였던 함수들을 Override해주어야 합니다. 여기에 후 처리들을 해주시면 되겠습니다.!&lt;/p&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;hr&gt;&lt;p style=&quot;clear: none; float: none;&quot;&gt;쓰다보니, 글이 길어진 것 같지만 소스를 작성해보시면 생각보다 간단하게 구현이 가능합니다. 프로젝트를 진행하다 보면 많이 사용하게 될 내용이라 프로젝트 구조 잡으실 때도 도움이 많이 되실 겁니다.&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>프로그래밍/Android</category>
      <author>여름숲_</author>
      <guid isPermaLink="true">https://re-build.tistory.com/29</guid>
      <comments>https://re-build.tistory.com/29#entry29comment</comments>
      <pubDate>Tue, 2 Oct 2018 11:12:07 +0900</pubDate>
    </item>
    <item>
      <title>하마터면 열심히 살 뻔했다.</title>
      <link>https://re-build.tistory.com/28</link>
      <description>&lt;p&gt;세상은 우리에게 열정을 가지라고 강요하고 그 열정을 약점 잡아 이용하고 착취한다.&lt;/p&gt;&lt;p&gt;그래서 열정을 함부로 드러내는 건 위험하다. 이런 세상이라면 차라리 열정이 없는 편이 더 나을지도 모르겠다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그럼에도 열정은 좋은 거다. 나를 위해 쓰기만 한다면 말이다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;내가 어떤 것에 열정을 쏟고 있다면 그 열정이 나를 위한 것인지, 남을 위한 건인지 잘 생각해볼 필요가 있다. 내가 알기론 열정이라는 것은 그렇게 자주 생기는 것도, 오래가는 것도 아니다. 열정을 막 쥐어 짜 내서도, 아무 데나 쏟아서도 안되는 이유가 여기에 있다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;열정도 닳는다. 함부로 쓰다 보면 정말 써야 할 때 쓰지 못하게 된다. 언젠가&amp;nbsp;열정을 쏟을 일이 찾아올 테고 그때를 위해서 열정을 아껴야 한다. 그러니까 억지로 열정을 가지려 애쓰지 말자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그리고 내 열정은 내가 알아서 하게 가만 놔뒀으면 좋겠다. 강요하지 말고, 뺏어 가지 좀 마라. 좀!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&amp;lt;하마터면 열심히 살 뻔했다&amp;gt; 중에서&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: right;&quot;&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>소소한 일상/쉼표 하나,</category>
      <author>여름숲_</author>
      <guid isPermaLink="true">https://re-build.tistory.com/28</guid>
      <comments>https://re-build.tistory.com/28#entry28comment</comments>
      <pubDate>Mon, 1 Oct 2018 17:33:08 +0900</pubDate>
    </item>
  </channel>
</rss>