package com.hannesdorfmann.mosby3.sample.mail.ui.view;
import android.annotation.TargetApi;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import com.easyandroidanimations.library.Animation;
import com.easyandroidanimations.library.AnimationListener;
import com.easyandroidanimations.library.ExplodeAnimation;
import com.easyandroidanimations.library.FadeInAnimation;
import com.hannesdorfmann.mosby3.sample.mail.R;
/**
* @author Hannes Dorfmann
*/
public class StarView extends ImageView {
private OnClickListener clickDelegate;
private boolean starred;
public StarView(Context context) {
super(context);
}
public StarView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public StarView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@TargetApi(21)
public StarView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
public void setStarred(boolean starred) {
this.starred = starred;
if (starred) {
setColorFilter(getResources().getColor(R.color.accent));
} else {
setColorFilter(getResources().getColor(R.color.star_deactivated));
}
}
@Override public void setOnClickListener(OnClickListener onClickListener) {
clickDelegate = onClickListener;
super.setOnClickListener(new OnClickListener() {
@Override public void onClick(View v) {
if (starred) {
startRemoveStarAnimation();
} else {
startAddStarAnimation();
}
}
});
}
private void startRemoveStarAnimation() {
clearAnimation();
new ExplodeAnimation(this).setDuration(200).setListener(new AnimationListener() {
@Override public void onAnimationEnd(Animation animation) {
setStarred(false);
new FadeInAnimation(StarView.this).setDuration(100).setListener(new AnimationListener() {
@Override public void onAnimationEnd(Animation animation) {
triggerClick();
}
}).animate();
}
}).animate();
}
private void startAddStarAnimation() {
clearAnimation();
android.view.animation.Animation animation =
AnimationUtils.loadAnimation(getContext(), R.anim.pulse);
animation.setAnimationListener(new android.view.animation.Animation.AnimationListener() {
@Override public void onAnimationStart(android.view.animation.Animation animation) {
setStarred(true);
}
@Override public void onAnimationEnd(android.view.animation.Animation animation) {
triggerClick();
}
@Override public void onAnimationRepeat(android.view.animation.Animation animation) {
}
});
startAnimation(animation);
}
private void triggerClick() {
if (clickDelegate != null) {
clickDelegate.onClick(this);
}
}
// TODO increase hit area
}