Android 패키지 앱 시작 애니메이션
gif 효과 도:
animation.gif
실현 방향:
자세히 살 펴 보면 애니메이션 의 집행 은 두 단계 로 나 뉜 다.
1 단 계 는 동전 드 랍 입 니 다.
2 단 계 는 지갑 바 운 드 입 니 다.
레이아웃 xml 파일 은 다음 과 같 습 니 다:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<ImageView
android:id="@+id/coin_iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@mipmap/coin"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginBottom="70dp"
android:layout_marginLeft="70dp"
android:src="@mipmap/version"/>
<ImageView
android:id="@+id/wallet_iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@mipmap/wallet"/>
<Button
android:id="@+id/start_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center|bottom"
android:layout_marginBottom="10dp"
android:text="start"/>
</FrameLayout>
동전 드 랍:동전 이 떨 어 지 는 과정 에서 두 가지 애니메이션 을 실행 하고 변위 와 회전 을 합 니 다.
변위 애니메이션 은 추가 애니메이션 을 사 용 했 습 니 다.xml 파일 은 다음 과 같 습 니 다.
<?xml version="1.0" encoding="utf-8"?>
<translate
xmlns:android="http://schemas.android.com/apk/res/android"
android:fromYDelta="-50%p"
android:interpolator="@android:anim/accelerate_interpolator"
android:toYDelta="0%"/>
회전 애니메이션 은 애니메이션 을 다시 쓰 고 android.hardware.camera 클래스 를 이용 하여 이 루어 집 니 다.
public class ThreeDRotateAnimation extends Animation {
int centerX, centerY;
Camera camera = new Camera();
@Override
public void initialize(int width, int height, int parentWidth, int parentHeight) {
super.initialize(width, height, parentWidth, parentHeight);
//
centerX = width / 2;
centerY = height / 2;
setDuration(500);
setInterpolator(new LinearInterpolator());
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
final Matrix matrix = t.getMatrix();
camera.save();
// y
camera.rotateY(360 * interpolatedTime);
camera.getMatrix(matrix);
//
matrix.preTranslate(-centerX, -centerY);
matrix.postTranslate(centerX, centerY);
camera.restore();
}
}
애니메이션 에 있 는 preTranslate 와 post Translate 방법 을 간단하게 말 합 니 다.preTranslate 는 rotateY 앞에서 평평 하 게 이동 하 는 것 을 말 합 니 다.post Translate 는 rotateY 후에 평평 하 게 이동 하 는 것 을 말 합 니 다.그들의 매개 변 수 는 목적지 의 좌 표를 평평 하 게 이동 하 는 것 이 아니 라 평평 하 게 이동 하 는 거리 입 니 다!회전 은(0,0)을 중심 으로 하기 때문에 동전 의 중심 을(0,0)과 맞 추기 위해 서 는 preTranslate(-centerX,-centerY),rotateY 가 완 성 된 후에 post Translate(centerX,centerY)를 호출 하여 그림 을 옮 겨 야 한다.이렇게 보 이 는 애니메이션 효 과 는 바로 동전 이 중심 에서 끊임없이 회전 하 는 것 이다.
마지막 으로 상기 두 가지 애니메이션 을 동시에 실행 하여 드 롭 회전 효 과 를 실현 합 니 다.
private void startCoin() {
//
Animation animationTranslate = AnimationUtils.loadAnimation(this,R.anim.anim_top_in);
//
ThreeDRotateAnimation animation3D = new ThreeDRotateAnimation();
animation3D.setRepeatCount(10);
AnimationSet animationSet = new AnimationSet(true);
animationSet.setDuration(800);
animationSet.addAnimation(animation3D);
animationSet.addAnimation(animationTranslate);
mCoinIv.startAnimation(animationSet);
}
지갑 튕 김:동전 이 떨 어 지 는 것 을 실행 하 는 동시에 ValueAnimator 애니메이션 을 시작 하여 지갑 이 튕 겨 나 올 시 기 를 판단 합 니 다.
private void setWallet() {
final ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, 1);
valueAnimator.setDuration(800);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override public void onAnimationUpdate(ValueAnimator animation) {
float fraction = animation.getAnimatedFraction();
// , ValueAnimator ,
if (fraction >= 0.75) {
valueAnimator.cancel();
startWallet();
}
}});
valueAnimator.start();
}
마지막 으로 지갑 튕 김 효과 애니메이션 을 실 행 했 습 니 다.여기 에는 ObjectAnimator 를 사 용 했 습 니 다.
private void startWallet() {
// x
ObjectAnimator objectAnimator1 = ObjectAnimator.ofFloat(mLogoIv, "scaleX", 1, 1.1f, 0.9f, 1);
objectAnimator1.setDuration(600);
// y
ObjectAnimator objectAnimator2 = ObjectAnimator.ofFloat(mLogoIv, "scaleY", 1, 0.75f, 1.25f, 1);
objectAnimator2.setDuration(600);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.setInterpolator(new LinearInterpolator());
// x,y
animatorSet.playTogether(objectAnimator1, objectAnimator2);
animatorSet.start();}
이렇게 간단 한 주머니 가 애니메이션 을 시작 하 는 효 과 는 많 지 않 습 니 다.유일 하 게 아 쉬 운 것 은 지갑 을 Y 축 으로 확대 할 때 Y 축 전 체 를 확대 하 는 것 입 니 다.지갑 의 밑부분 을 움 직 이지 않 으 려 면 지갑 윗부분 만 튕 겨 야 합 니 다.아직 좋 은 방법 이 생각 나 지 않 았 습 니 다.동생 은 큰 신의 가르침 을 바 랍 니 다!감사합니다!전체 원본:
전체 원본 코드GitHub
괜 찮 으 시다 면 start(~)r 를 기억 하 세 요~
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.