Android 컨트롤 FlowLikeView 좋아요 애니메이션 구현
5354 단어 FlowLikeView칭찬 하 다
실행 효과
1.구체 적 인 실현 절차
전체 좋아요 누 르 는 과정 을 자세히 살 펴 보면 먼저'사랑'의 등장 애니메이션 이 고 그 다음 에'사랑'이 기포 와 비슷 한 형식 으로 위로 운동 하 는 것 을 알 수 있다.
'하트'의 등장 애니메이션
private AnimatorSet generateEnterAnimation(View target) {
ObjectAnimator alpha = ObjectAnimator.ofFloat(target, "alpha", 0.2f, 1f);
ObjectAnimator scaleX = ObjectAnimator.ofFloat(target, "scaleX", 0.5f, 1f);
ObjectAnimator scaleY = ObjectAnimator.ofFloat(target, "scaleY", 0.5f, 1f);
AnimatorSet enterAnimation = new AnimatorSet();
enterAnimation.playTogether(alpha, scaleX, scaleY);
enterAnimation.setDuration(150);
enterAnimation.setTarget(target);
return enterAnimation;
}
여기 서 속성 애니메이션 을 사용 하여'하트'이미지 컨트롤 이 화면 에 있 는 상 태 를 바 꾸 었 고 컨트롤 투명도 알파,컨트롤 의 크기 조정 정도 Scale 등 속성 애니메이션 을 구체 적 으로 사용 했다.'하트'의 상승 궤적 애니메이션
private ValueAnimator generateCurveAnimation(View target) {
CurveEvaluator evaluator = new CurveEvaluator(generateCTRLPointF(1), generateCTRLPointF(2));
ValueAnimator valueAnimator = ValueAnimator.ofObject(evaluator,
new PointF((mViewWidth - mPicWidth) / 2, mViewHeight - mChildViewHeight - mPicHeight),
new PointF((mViewWidth) / 2 + (mRandom.nextBoolean() ? 1 : -1) * mRandom.nextInt(100), 0));
valueAnimator.setDuration(3000);
valueAnimator.addUpdateListener(new CurveUpdateLister(target));
valueAnimator.setTarget(target);
return valueAnimator;
}
여기 서 우 리 는 평가 알고리즘 CurveEveluator 를 사용자 정의 해 야 합 니 다.왜냐하면'사랑'이 올 라 가 는 과정 에서 특정한 직선 으로 운동 하 는 것 이 아니 라 불규칙 한 곡선 을 통 해 위로 올 라 가 는 것 입 니 다.우 리 는 TypeEveluator 의 역할 이 애니메이션 의 변화 율 에 따라 컨트롤 속성의 현재 값 을 설정 하 는 것 이라는 것 을 알 고 있 습 니 다.구체 적 인 알고리즘 실현 은 3 단계 베 어 셀 곡선 공식 을 사용 하 는 것 입 니 다.그 중에서 P0 은 애니메이션 의 출발점 이 고 P3 는 애니메이션 의 종점 이 며 다른 두 점 인 P1,P2 는 3 단계 베 세 르 곡선의 제어점 이다.구체 적 으로 P1,P2 는 어떤 값 을 가 져 가 야 하 는 지,이 건 경험 상 차이 가 많 지 않 으 면 됩 니 다^ ^
private class CurveEvaluator implements TypeEvaluator<PointF> {
// ,
private PointF ctrlPointF1;
private PointF ctrlPointF2;
public CurveEvaluator(PointF ctrlPointF1, PointF ctrlPointF2) {
this.ctrlPointF1 = ctrlPointF1;
this.ctrlPointF2 = ctrlPointF2;
}
@Override
public PointF evaluate(float fraction, PointF startValue, PointF endValue) {
// ,
float leftTime = 1.0f - fraction;
PointF resultPointF = new PointF();
//
resultPointF.x = (float) Math.pow(leftTime, 3) * startValue.x
+ 3 * (float) Math.pow(leftTime, 2) * fraction * ctrlPointF1.x
+ 3 * leftTime * (float) Math.pow(fraction, 2) * ctrlPointF2.x
+ (float) Math.pow(fraction, 3) * endValue.x;
resultPointF.y = (float) Math.pow(leftTime, 3) * startValue.y
+ 3 * (float) Math.pow(leftTime, 2) * fraction * ctrlPointF1.y
+ 3 * leftTime * fraction * fraction * ctrlPointF2.y
+ (float) Math.pow(fraction, 3) * endValue.y;
// ,
// resultPointF.x = (float) Math.pow(leftTime, 2) * startValue.x + 2 * fraction * leftTime * ctrlPointF1.x
// + ((float) Math.pow(fraction, 2)) * endValue.x;
// resultPointF.y = (float) Math.pow(leftTime, 2) * startValue.y + 2 * fraction * leftTime * ctrlPointF1.y
// + ((float) Math.pow(fraction, 2)) * endValue.y;
return resultPointF;
}
}
2.사용 조작
<com.anenn.flowlikeviewlib.FlowLikeView
android:id="@+id/flowLikeView"
android:layout_width="75dp"
android:layout_height="200dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:background="@android:color/transparent"
android:includeFontPadding="false"
android:onClick="addLikeView"
android:text="Like"
android:textColor="#0099cc"
android:textSize="18sp"
android:textStyle="bold" />
</com.anenn.flowlikeviewlib.FlowLikeView>
그리고 응답 이벤트 에서 플 로 우 Like View 인 스 턴 스 를 누 르 는 addLike View()방법 을 사용 하면 됩 니 다.물론 애니메이션 이 끝 난 후에 view 를 용기 에서 remove 하 는 것 을 기억 하 세 요.원본 코드다운로드 하 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Android 사용자 정의 view 모 의 틱 톡 좋아요 효과 구현사용자 정의 view 를 배우 고 놀 고 싶 은 것 이 있 습 니 다.마침 틱 톡 의 좋아요 효과 가 좋 은 것 을 보 았 습 니 다.시도 해 보 세 요. 클릭 할 때 하트 모양 의 그림 을 전체 view 에 추가 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.