Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- apache gzip
- Android
- Kotlin
- FLUTTER
- Exception
- tomcat
- css
- 안드로이드
- release Apk
- error
- Eclipse
- java error
- Program type already present
- Android Apk 이름 변경
- Android Apk 이름
- MySQL
- JavaScript
- Firebase
- jQuery
- android error
- Java
- spring
- html
- fragment
- release unsigned
- Android Apk
- DataTable
- android fragment
- R프로그래밍
- CSS사용법
Archives
- Today
- Total
selfstarter
Android fragment 정리 본문
fragment add, replace
add는 activity에 기존 fragment는 놔두고 추가하는 것. onDetch를 호출하지 않을 때도 있다고 한다. 그리고 같은 fragment를 add할 시 에러 발생
replace는 기존 fragment를 변경하는 것. add, remove를 같이 쓰는게 번거로워 보여 간편하게 replace 사용
fragment backstack
현재 실행하려는 트랙잭션의 상태를 기억한다. 스마트폰의 back key를 통해 프래그먼트를 이전 상태로 되돌릴 수 있다
만약 activity가 하나이고 fragment만 이동하는 구조라면 스마트폰 back key 설정을 하지 않으면 앱을 나가버린다
replace 다음에 addToBackStack 함수만 호출하면 된다
public void changeFragment (Fragment fragment) {
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fm.beginTransaction();
fragmentTransaction.replace(R.id.fragment, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
Fragment 화면전환 애니메이션
- 속성 애니메이션 사용. 속성 애니메이션은 거의 모든 항목을 애니메이션으로 만들 수 있다.
- 시간에 따라 객체의 속성을 변화시킬 수 있음
애니메이션 정의
- res/anim 폴더 안에 애니메이션을 정의하는 xml을 생성한다
- objectAnimator android:propertyName : 해당 속성의 이름을 의미. null이면 안된다
- objectAnimator android:duration : 해당 애니메이션의 길이. milliseconds
- objectAnimator android:valueFrom : 애니메이션 전 properyName에 해당하는 속성의 값을 설정
- objectAnimator android:valueTo : 애니메이션 후 properyName에 해당하는 속성의 값을 설정
- objectAnimator android:valueType : value data type
- translate android:fromXDelta : X의 시작 위치
- translate android:toXDelta : X의 끝나는 위치
- translate android:fromYDelta : Y의 시작 위치
- translate android:toYDelta : Y의 끝나는 위치
- translate android:duration : 애니메이션 시간
- start_left : 왼쪽에서 fragment view가 보임
<set xmlns:android="http://schemas.android.com/apk/res/android"> <objectAnimator android:propertyName="x" android:duration="1000" android:valueFrom="-1080dp" android:valueTo="0" android:valueType="floatType" /> </set>
- start_right : 오른쪽에서 fragment view가 보임
<set xmlns:android="http://schemas.android.com/apk/res/android"> <objectAnimator android:propertyName="x" android:duration="1000" android:valueFrom="1080dp" android:valueTo="0" android:valueType="floatType" /> </set>
- end_left : 왼쪽으로 fragment view가 이동하며 사라짐
<set xmlns:android="http://schemas.android.com/apk/res/android"> <objectAnimator android:propertyName="x" android:duration="1000" android:valueFrom="0" android:valueTo="-1080dp" android:valueType="floatType" /> </set>
- end_right : 오른쪽으로 fragment view가 이동하며 사라짐
<set xmlns:android="http://schemas.android.com/apk/res/android"> <objectAnimator android:propertyName="x" android:duration="1000" android:valueFrom="0" android:valueTo="1080dp" android:valueType="floatType" /> </set>
- fade_in : 화면이 점점 나타남
<set xmlns:android="http://schemas.android.com/apk/res/android"> <objectAnimator android:duration="1000" android:propertyName="alpha" android:valueFrom="0" android:valueTo="1" android:valueType="floatType" /> </set>
- fade_in : 화면이 점점 사라짐
<set xmlns:android="http://schemas.android.com/apk/res/android"> <objectAnimator android:duration="1000" android:propertyName="alpha" android:valueFrom="1" android:valueTo="0" android:valueType="floatType" /> </set>
- translate의 fromXDelta, fromYDelta 등 속성도 사용 가능
<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <translate android:fromXDelta="0%" android:toXDelta="100%" android:fromYDelta="0%" android:toYDelta="0%" android:duration="1000" /> </set>
Fragment 화면 전환
- fragmentTransaction에서 setCustomAnimations 함수 호출
- back은 휴대폰에서 back key를 눌렀을 때다. toolbar에 이전화면 되돌아가기 icon 선택 시 replace로 화면을 교체하므로 1,2번째 인자에 해당하는 애니메이션이 실행된다(back ani실행 x)
- setCustomAnimations 함수에 인자를 두개만 전달하면 화면 전환 ani만 설정, back ani는 지정하지 않는다
fragmentTransaction.setCustomAnimations(
@AnimatorRes @AnimRes int enter
, @AnimatorRes @AnimRes int exit
, @AnimatorRes @AnimRes int popEnter
, @AnimatorRes @AnimRes int popExit)
enter : 화면 이동 시 새로 들어오는 fragment ani
exit : 화면 이동 시 기존 fragment ani
popEnter : back할 때 새로 들어오는 fragment ani
popExit : back할 때 기존에 있던 fragment ani
public void changeFragment (Fragment fragment) {
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fm.beginTransaction();
fragmentTransaction.setCustomAnimations(R.anim.start_left, R.anim.end_right, R.anim.start_left, R.anim.end_right);
fragmentTransaction.setCustomAnimations(R.anim.start_left, R.anim.end_right);
fragmentTransaction.replace(R.id.fragment, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
'App > Android' 카테고리의 다른 글
Android drawable image에서 bitmap으로 변환 (0) | 2020.06.15 |
---|---|
Android Example with Fragment and ToolBar (0) | 2020.06.04 |
XML에 선언된 Fragment Java객체로 가져오기 (0) | 2020.05.31 |
Android DrawerLayout (0) | 2020.05.25 |
<column constraints>or comma expected 해결방법 (0) | 2020.05.23 |
Comments