ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Tip] 레이아웃 페이드인 애니메이션 (Fade in Layout)
    Mhwan's Develope/Android 2016. 10. 25. 00:55

    안드로이드에서 뷰마다 애니메이션을 줄 수 있는데, 이 글은 특정 뷰 그룹으로 묶어서 애니메이션을 주기 위해 만든 커스텀 리니어레이아웃이다.


    리니어레이아웃을 상속받아 작성한 것으로 다른 액티비티에서 show를 호출하면 애니메이션이 시작되게된다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    public class FadeInLinearlayout extends LinearLayout {
        private Context context;
        private Animation startanimation;
     
        public FadeInLinearlayout(Context context) {
            super(context);
            this.context = context;
            initAnimations();
        }
     
        public FadeInLinearlayout(Context context, AttributeSet attrs) {
            super(context, attrs);
            this.context = context;
            initAnimations();
        }
     
        public FadeInLinearlayout(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            this.context = context;
            initAnimations();
        }
     
        @TargetApi(Build.VERSION_CODES.LOLLIPOP)
        public FadeInLinearlayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
            super(context, attrs, defStyleAttr, defStyleRes);
            this.context = context;
            initAnimations();
        }
     
        private void initAnimations() {
            startanimation = AnimationUtils.loadAnimation(context, R.anim.anim_button);
        }
     
        public void show() {
            if (isVisible())
                return;
            show(true);
        }
     
        public void show(boolean withAnimation) {
            if (withAnimation)
                this.startAnimation(startanimation);
            this.setVisibility(View.VISIBLE);
        }
     
        public boolean isVisible()
        {
            return (this.getVisibility() == View.VISIBLE);
        }
    }
    cs


    애니메이션 파일은 아래와 같다

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:fillAfter="true"
        android:duration="600"
        android:interpolator="@android:anim/linear_interpolator">
     
        <alpha
            android:fromAlpha="0.3"
            android:toAlpha="1.0"/>
        <translate
            android:fromYDelta="70%"
            android:toYDelta="0%" />
    </set>
    cs


    이렇게 한 다음에 액티비티 xml에서 동시에 보이게할 뷰를 FadeInLinearlayout으로 묶어버리면 된다.


    댓글

Designed by Mhwan.