Android点赞爱心动画效果
一般点击加上些动画比较好看。爱心动画
一、思路
自定义LikeView
二、效果图:
三、关键代码:
public class LikeView extends RelativeLayout {
private GestureDetector gestureDetector;
/** 图片大小 */
private int likeViewSize = 330;
private int[] angles = new int[]{-30, 0, 30};
/** 单击是否有点赞效果 */
private boolean canSingleTabShow = false;
private OnPlayPauseListener onPlayPauseListener;
private OnLikeListener onLikeListener;
public LikeView(Context context) {
super(context);
init();
}
public LikeView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onDoubleTap(MotionEvent e) {
addLikeView(e);
onLikeListener.onLikeListener();
return true;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
if (onPlayPauseListener != null) {
onPlayPauseListener.onPlayOrPause();
}
return true;
}
});
setOnTouchListener((v, event) -> {
gestureDetector.onTouchEvent(event);
return true;
});
}
private void addLikeView(MotionEvent e) {
ImageView imageView = new ImageView(getContext());
imageView.setImageResource(R.mipmap.formal_heart_select);
addView(imageView);
LayoutParams layoutParams = new LayoutParams(likeViewSize, likeViewSize);
layoutParams.leftMargin = (int) e.getX() - likeViewSize / 2;
layoutParams.topMargin = (int) e.getY() - likeViewSize;
imageView.setLayoutParams(layoutParams);
playAnim(imageView);
}
private void playAnim(View view) {
AnimationSet animationSet = new AnimationSet(true);
int degrees = angles[new Random().nextInt(3)];
animationSet.addAnimation(AnimUtils.rotateAnim(0, 0, degrees));
animationSet.addAnimation(AnimUtils.scaleAnim(100, 2f, 1f, 0));
animationSet.addAnimation(AnimUtils.alphaAnim(0, 1, 100, 0));
animationSet.addAnimation(AnimUtils.scaleAnim(500, 1f, 1.8f, 300));
animationSet.addAnimation(AnimUtils.alphaAnim(1f, 0, 500, 300));
animationSet.addAnimation(AnimUtils.translationAnim(500, 0, 0, 0, -400, 300));
animationSet.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
new Handler().post(() -> removeView(view));
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
view.startAnimation(animationSet);
}
public interface OnPlayPauseListener {
void onPlayOrPause();
}
/**
* 设置单机播放暂停事件
* @param onPlayPauseListener
*/
public void setOnPlayPauseListener(OnPlayPauseListener onPlayPauseListener) {
this.onPlayPauseListener = onPlayPauseListener;
}
public interface OnLikeListener {
void onLikeListener();
}
/**
* 设置双击点赞事件
* @param onLikeListener
*/
public void setOnLikeListener(OnLikeListener onLikeListener) {
this.onLikeListener = onLikeListener;
}
}
四、项目demo源码结构图:
有问题或者需要完整源码demo的可以看简介联系我,也可以私信我,我每天都看私信的