Android 애니메이션(애니메이션 보기,프레임 애니메이션,속성 애니메이션)상세 소개
안 드 로 이 드 애니메이션 은 면접 때 자주 물 어 보 는 화제 다.우 리 는 모두 안 드 로 이 드 애니메이션 이 세 가지 로 나 뉘 는데 그것 이 바로 View 애니메이션,프레임 애니메이션 과 속성 애니메이션 이라는 것 을 안다.
먼저 이 세 가지 애니메이션 에 대해 개술 을 한다.
View 애니메이션 은 점진 적 인 애니메이션 으로 이미지 의 이동,확대,회전 과 투명도 등 각종 점진 적 인 변환 을 통 해 애니메이션 효 과 를 완성 합 니 다.
프레임 애니메이션 은 끊임없이 그림 전환 을 통 해 애니메이션 효 과 를 실현 한다.
속성 애니메이션 은 끊임없이 대상 의 속성 을 바 꾸 어 애니메이션 효 과 를 실현 합 니 다.본문 은 오리지널 이 므 로 전재 할 때 출처 를 밝 혀 주 십시오.
http://blog.csdn.net/seu_calvin/article/details/52724655
1. 애니메이션 보기
1.1 시스템 에서 제공 하 는 네 가지 View 애니메이션(추가 애니메이션)
View 애니메이션 은 res/anim/name.xml 파일 에서 설정 할 수 있 습 니 다.네 가지 View 애니메이션 의 그 라 데 이 션 변환 은 각각
view.startAnimation(AnimationUtils.loadAnimation(this,R.anim.myanimation));
이것 은 물론 자바 코드 에서 도 설정 할 수 있 고 비교적 간단 합 니 다.여기에 예제 코드 를 썼 습 니 다.
splash = (RelativeLayout)findViewById(R.id.splash);
//
RotateAnimation rotateAnimation = new RotateAnimation(0,360,
Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
rotateAnimation.setDuration(2000);
rotateAnimation.setFillAfter(true);
//
ScaleAnimation scaleAnimation = new ScaleAnimation(0,1,0,1,
Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
scaleAnimation.setDuration(2000);
scaleAnimation.setFillAfter(true);
//
AlphaAnimation alphaAnimation = new AlphaAnimation(0.2f,1.0f);
alphaAnimation.setDuration(2000);
alphaAnimation.setFillAfter(true);
//
TranslateAnimation translateAnimation = newTranslateAnimation (0,0,100,100);
translateAnimation.setDuration(2000);
translateAnimation.setFillAfter(true);
//
AnimationSet animationSet = new AnimationSet(true);
animationSet.addAnimation(rotateAnimation);
animationSet.addAnimation(scaleAnimation);
animationSet.addAnimation(alphaAnimation);
animationSet.addAnimation(translateAnimation);
//
plash.startAnimation(animationSet);
1.2 사용자 정의 애니메이션 보기사용자 정의 애니메이션 의 실제 응용 에서 보기 드 물기 때문에 간단 한 소개 만 할 수 있 습 니 다.
사용자 정의 애니메이션 을 완성 하려 면 Animation 클래스 를 계승 하고 initialize()와 apply Transformation()을 다시 써 야 합 니 다.
전 자 는 초기 화 된 작업 에 사용 되 고 후 자 는 행렬 변환 에 사용 된다.
1.3 ViewGroup 의 모든 하위 요소 에 애니메이션 설정
위 1.1,1.2 는 모두 View 에 애니메이션 효 과 를 설정 하고 Android 역시 View Group 에 설정 을 제공 합 니 다.
android:layoutAnimation=”@anim/layout_anim'은 ViewGroup 의 모든 하위 요소 에 애니메이션 을 설정 하 는 목적 을 달성 합 니 다.다음은 관련 코드 를 드 립 니 다.
//res/anim/anim/layout_anim.xml
<layoutAnimation xmlns:android=” http://schemas.android.com/apk/res/android”
android:delay=”0.1” // 0.1*T, 100ms
android:animationOrder=”normal” // , reverse random
android: animation=” @anim/layout_anim_item”/>
//res/anim/anim/layout_anim_item.xml
<?xml version=”1.0” encoding=”utf-8”?>
<set xmlns:android=”http://schemas.android.com/apk/res/android”
animation:duration=”200” // T
animation:interpolator=”@android:anim/accelerate_ interpolator” //
animation:shareInterpolator=”true”> //
<alpha android:fromAlpha=”0.2” android: toAlpha =”1.0”/>
<translate android:fromXDelta=”100” android: toXDelta =”0”/>
</set>
1.4 Activity 전환 을 위 한 애니메이션 설정모두 가 사용 한 적 이 있 을 것 입 니 다.startActivity()이후 에 사용 하면 Activity 전환 시 이동 하 는 애니메이션 효 과 를 얻 을 수 있 습 니 다.
overridePendingTransition(R.anim.tran_in,R.anim.tran_out);
//res/anim/tran_in
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
// 100% , tran_out toXDelta="-100%p",
android:fromXDelta="100%p"
android:fromYDelta="0"
android:toXDelta="0"
android:toYDelta="0" >
</translate>
2. 프레임 애니메이션위 에서 도 언급 했 듯 이 프레임 애니메이션 은 끊임없이 그림 을 전환 하여 애니메이션 효 과 를 실현 하 는 것 이다.OOM 이 쉬 운 것 이 분명 하기 때문에 프레임 애니메이션 을 사용 할 때 그림 의 크기 에 주의해 야 한다.
프레임 애니메이션 의 사용 도 간단 합 니 다.사용 예 는 다음 과 같 습 니 다.
//res/drawable/myanimation.xml
<?xml version=”1.0” encoding=”utf-8”?>
<animation-list xmlns:android=”http://schemas.android.com/apk/res/android”
animation:oneshot=”false” > //false ,true View setFillAfter
<item android: drawable =”@ drawable/ drawable 1” android:duration=” 200”>
<item android: drawable =”@ drawable/ drawable 2” android:duration=” 200”>
</animation-list>
//
view.setBackgroundResource(R.drawable.myanimation.xml);
(AnimationDrawable)view.getBackground.start();
3. 속성 애니메이션View 애니메이션 의 네 가지 효 과 는 현저 한 단점 이 있 습 니 다.그 려 진 효 과 는 View 의 속성 을 진정 으로 바 꾸 지 않 았 습 니 다.즉,left,top,right 와 bottom 의 값 은 시스템 이 임시로 그린 결과 일 뿐 입 니 다.이렇게 View 의 클릭 위 치 는 변 하지 않 았 다.이 문제 에 대해 안 드 로 이 드 3.0 부터 속성 애니메이션 이 생 겨 났 다.
속성 애니메이션 의 본질은 새로 추 가 된 속성(예 를 들 어 번역 X/Y,scaleX/Y 크기 조정,회전 rotationX/Y 등)을 바 꾸 고 화면 을 새로 고침 함으로써 애니메이션 효 과 를 실현 하 며 클릭 위치의 실시 간 변 화 를 실현 하 는 것 이다.그러나 속성 애니메이션 은 원본 상하 좌우 네 개의 값 을 수정 하지 않 습 니 다.마지막 으로 주의해 야 할 것 은 속성 애니메이션 은 View 뿐만 아니 라 모든 대상 에 도 사용 할 수 있다 는 것 이다.
속성 애니메이션 과 관련 된 클래스 와 방법 을 소개 합 니 다.
3.1 setTranslationX 방법
이 방법 은 애니메이션 효 과 를 사용 하지 않 아 도 되 기 때문에 view 속성 을 직접 변경 하 는 방법 입 니 다.
view.setTranslationX(x);//3.0
ViewHelper.setTranslationX(view,x);//3.0 NineOldAndroid
3.2 ValueAnimator 류
ValueAnimator , , , onAnimationUpdate() 。
[java] view plain copy CODE
ValueAnimator animator = ValueAnimator.ofInt(1, 100); // , 1 100
animator.addUpdateListener(new AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation){
float fraction = animation.getAnimatedFraction();// 0-1
// start+(end-strat)*fraction,
view.getLayoutParams().width = new IntEvaluator().evaluate(fraction,start,end) // set
view.requestLayout();
}
});
animator.setDuration(1000).start();
3.3 ObjectAnimator 클래스ObjectAnimator 는 ValueAnimator 로부터 계승 되 었 습 니 다.view 의 속성 을 직접 바 꿀 수 있 습 니 다.다음은 하나의 예 를 통 해 소개 합 니 다.
//x
ObjectAnimator animator = ObjectAnimator.ofFloat(view,”scaleX”,2.0f);
animator.setDuration(1000);
animator.setStartDelay(1000);
animator.start();
대부분의 경우 ObjectAnimator 를 사용 하면 충분 합 니 다.ValueAnimator 처럼 애니메이션 업데이트 논 리 를 직접 쓰 지 않 아 도 되 지만 ObjectAnimator 는 일정한 제한 이 있 습 니 다.목표 속성 이 지정 한 처리 방법(예 를 들 어 get/set 방법 제공)을 제공 해 야 합 니 다.이것 은 ObjectAnimator 의 원 리 는 set 방법 으로 속성 값 을 업데이트 하 는 것 입 니 다.또한 우리 가 초기 값 을 전달 하지 않 으 면 시스템 은 get 방법 으로 값 을 가 져 옵 니 다.위의 3.2 에서 소개 한 ValueAnimator 는 속성 값 을 직접 조작 하지 않 기 때문에 대상 의 속성 을 조작 하려 면 se/get 방법 이 필요 하지 않 습 니 다.현재 애니메이션 의 계산 을 통 해 모든 속성 을 수정 할 수 있 습 니 다.이 문제 에 대해 공식 적 으로 우 리 는 원시 대상 을 포장 하고 간접 적 으로 get/set 방법 을 제공 하 는 것 을 추천 합 니 다.실현 하기 가 매우 간단 합 니 다.실례 는 다음 과 같 습 니 다.
ViewWrapper wrapper = new ViewWrapper(view);
ObjectAnimator.ofInt(view,”width”,200).setDuration(1000).start();
private static class ViewWrapper{
private View myView;
public ViewWrapper(View view){
myView = view;
}
public int getWidth(){
return myView.getLayoutParams().width;
}
public int setWidth(int width){
myView.getLayoutParams().width = width;
myView.requestLayout();
}
}
3.4 View Property 애니메이션 클래스View Property Animation 은 Nine Old Android 라 이브 러 리 의 클래스 로 Object Animatior 류 의 조작 을 간소화 하고 Nine Old Android 라 이브 러 리 는 3.0 이전 Android 버 전 을 호 환 합 니 다.다음은 하나의 예 를 거 쳐 소개 한다.
//x , 3.3
ViewPropertyAnimation.animate(view).scaleX(2.0f).setDuration(1000)
.setInterpolator(new OvershootInterpolator())
.setStartDelay(1000).start();
3.5 AnimationSet 클래스애니메이션 집합 은 여러 애니메이션 을 하나의 조합 으로 조합 하 는 체 제 를 제공 하고 애니메이션 의 순서 관 계 를 설정 할 수 있 습 니 다.예 를 들 어 시간 재생,순서 재생 또는 지연 재생 과 같 습 니 다.구체 적 인 사용 방법 은 비교적 간단 하 다.다음 과 같다.
ObjectAnimator objectAnimator1= ObjectAnimator.ofFloat(view, "alpha", 1.0f, 0f);
ObjectAnimator objectAnimator2= ObjectAnimator.ofFloat(view, "translationY", 0f, 30f);
ObjectAnimator objectAnimator3= ObjectAnimator.ofFloat(view, "translationX", 0f, 30f);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.setDuration(5000);
animatorSet.setInterpolator(new LinearInterpolator());
// animatorSet.playTogether(objectAnimator1, objectAnimator2. objectAnimator3); //
// 12 ,3
animatorSet.play(objectAnimator1).with(objectAnimator2);
animatorSet.play(objectAnimator3).after(objectAnimator2);
animatorSet.start();
4. 플러그 인 총결산4.1 시스템 이 우리 에 게 제공 한 플러그 인
각종 플러그 인 은 Interpolator 인 터 페 이 스 를 실 현 했 습 니 다.시스템 이 직접 사용 할 수 있 는 플러그 인 을 살 펴 보 겠 습 니 다.
4.2 사용자 정의 플러그 인
Interpolator 는 모두 Interpolator 인 터 페 이 스 를 실 현 했 고 Interpolator 인 터 페 이 스 는 TimeInterpolator 에서 계승 되 었 다.TimeInterpolator 인 터 페 이 스 는 시스템 에서 호출 된 getInterpolation(float input)방법 을 정의 했다.그 중에서 매개 변수 input 는 애니메이션 의 완성 진 도 를 나타 내 고 0 과 1 사이 에 있다.사용자 정의 플러그 인 은 Interpolator 인 터 페 이 스 를 실현 하고 getInterpolation()방법 을 덮어 쓰 면 사용자 정의 애니메이션 효 과 를 실현 할 수 있 습 니 다.
다음은 애니메이션 의 시작 과 끝 속도 가 느 리 고 중간 에 가속 하 는 AccelerateDecelerateInterpolator 플러그 인 입 니 다.
public class AccelerateDecelerateInterpolator extends BaseInterpolator
implements NativeInterpolatorFactory {
......
public float getInterpolation(float input) {
return (float)(Math.cos((input + 1) * Math.PI) / 2.0f) + 0.5f;
}
......
}
5. 애니메이션 모니터우 리 는 평소에 개발 하 는 과정 에서 애니메이션 이 완 성 된 시 기 를 감청 하여 업무 논 리 를 계속 해 야 한다.그러면 우 리 는 애니메이션 집합 에 Animation Listener 감청 기 를 설정 하여 실현 할 수 있다.애니메이션 시작,종료,취소,반복 재생 을 감청 할 수 있 습 니 다.
//
animationSet.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {}
@Override
public void onAnimationEnd(Animation animation) {}
@Override
public void onAnimationRepeat(Animation animation) {}
@Override
public void onAnimationCancel(Animation animation) {}
});
마지막 으로 애니메이션 의 모든 프레임 의 리 셋 을 감청 하려 면 Animator UpdateListener 모니터 를 설정 하고 onAnimationUpdate()방법 을 다시 쓰 면 됩 니 다.이로써 안 드 로 이 드 애니메이션 에 대한 지식 을 총 결 하 였 습 니 다.
읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.