QQ5.0 왼쪽 스와이프 효과 구현 방법

이전 세 개의 글에서는 간단한 QQ5.0 스타일 왼쪽 스와이프 효과 구현 방법을 소개했습니다. 본 글에서는 Android 3.0 이상 버전에서 제공하는 속성 애니메이션을 활용한 실제 QQ5.0 스타일 스와이프 효과 구현을 탐구합니다. 이 내용은 이전 세 개의 글과 밀접한 연관성을 가지고 있으며, 이전 글을 완전히 이해했다면 이 글도 어렵지 않을 것입니다. 본 글의 핵심은 속성 애니메이션을 통해 위의 시각 효과를 구현하는 것입니다.

시작하기 전에 사과드립니다. 이전 세 개의 글에서 코드 작성 오류로 인해 메뉴 배경 이미지가 전체 화면을 채우지 못하는 문제가 발생했습니다. 이 문제를 어떻게 해결할 수 있을까요?

left_menu.xml 파일에서 background 속성을 android:background="#0000"으로 수정하세요.

activity_main.xml 코드:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:hyman="http://schemas.android.com/apk/res/com.example.android_qq_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <com.example.menu.SlidingMenu 
        android:id="@+id/slidingMenu"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/img_frame_background"
        hyman:rightPadding="100dp" >
        <LinearLayout 
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:orientation="horizontal"
            >
            
            <include layout="@layout/left_menu"/>"
            
            <LinearLayout 
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@drawable/qq"
                >
                <Button 
                    android:id="@+id/button"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="전환 버튼"
                    />
            </LinearLayout>
            
        </LinearLayout>
    </com.example.menu.SlidingMenu>
    
</RelativeLayout>

배경 이미지를 청색 표시 위치에 추가하세요.

다른 부분은 변경하지 않아도 됩니다. 이제 속성 애니메이션을 통해 위의 효과를 구현하는 방법을 분석해보겠습니다:

  /**
     * 드로어 스타일 스와이프 효과 구현
     */
    @Override
    protected void onScrollChanged(int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
        super.onScrollChanged(scrollX, scrollY, oldScrollX, oldScrollY);
        
        /**
         * 차이점1: 콘텐츠 영역 1.0~0.7 확대 효과 scale : 1.0~0.0 0.7 + 0.3 * scale
         * 
         * 차이점2: 메뉴의 이동 거리가 변경되어야 함
         * 
         * 차이점3: 메뉴 표시 시 확대 및 투명도 변화가 필요함. 확대: 0.7 ~1.0 1.0 - scale * 0.3 투명도 0.6 ~ 1.0 
         * 0.6+ 0.4 * (1- scale) ;
         * 
         */
        
        // 메뉴 표시/숨기기 애니메이션 설정
        float scrollRatio = scrollX * 1.0f /menuWidth;
        ViewHelper.setTranslationX(menuView, menuWidth*scrollRatio*0.7f);
        
        // 메뉴 투명도 변화 설정
        float menuScale = 0.6f+ 0.4f * (1- scrollRatio);
        ViewHelper.setScaleX(menuView, menuScale);
        ViewHelper.setScaleY(menuView, menuScale);
        // 메뉴 확대 비율 설정
        float menuAlpha = 1.0f - scrollRatio * 0.3f;
        ViewHelper.setAlpha(menuView, menuAlpha);
        
        // 콘텐츠 확대 중심 설정
        ViewHelper.setPivotX(contentView, 0);
        ViewHelper.setPivotY(contentView, contentView.getHeight()/2);
        // 콘텐츠 투명도 변화 설정
        float contentScale = 0.7f + 0.3f * scrollRatio;
        ViewHelper.setScaleX(contentView, contentScale);
        ViewHelper.setScaleY(contentView, contentScale);
        
    }

Android 3.0 이하 시스템은 속성 애니메이션이 지원되지 않으므로, 해당 패키지를 추가해야 합니다. 필요하신 분은 댓글로 알려주세요. 위 과정을 통해 스와이프 효과가 완전히 구현되었습니다. 효과를 확인해보세요:

태그: Android 속성 애니메이션 스와이프 효과 레이아웃 UI 개발

6월 18일 00:21에 게시됨