package com.sunsky.marqueeview;

import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.TranslateAnimation;
import android.widget.ViewFlipper;

import java.util.List;

/**
 * 类描述:仿淘宝首页的 淘宝头条滚动的自定义View
 * 可以支持单行或多行,滚动布局自定义
 * 创建人:sunsky
 * 创建时间:2017/6/1 15:57
 * 修改人:sunsky
 * 修改时间:2017/6/1 15:57
 * 修改备注:
 */
public class MarqueeView extends ViewFlipper {

    private Context mContext;
    /**
     * 是否显示淡入淡出动画
     */
    private boolean isSetAlphaAnim = true;
    /**
     * 切换间隔时间
     */
    private int interval = 5000;
    /**
     * 动画时间
     */
    private int animDuration = 2000;

    public MarqueeView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context, attrs, 0);
    }

    private void init(Context context, AttributeSet attrs, int defStyleAttr) {
        this.mContext = context;
        TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MarqueeViewUp, defStyleAttr, 0);

        isSetAlphaAnim = ta.getBoolean(R.styleable.MarqueeViewUp_isSetAlphaAnim, isSetAlphaAnim);
        interval = ta.getInteger(R.styleable.MarqueeViewUp_interval, interval);
        animDuration = ta.getInteger(R.styleable.MarqueeViewUp_animDuration, animDuration);


        setFlipInterval(interval);

        //淡入淡出动画
        AlphaAnimation animationIn = new AlphaAnimation(0, 1);//淡入 从透明到不透明
        animationIn.setDuration(animDuration);//设置动画持续时间

        AlphaAnimation animationOut = new AlphaAnimation(1, 0);//淡出 从不透明到透明
        animationOut.setDuration(animDuration);//设置动画持续时间

        //平移动画
        TranslateAnimation translateAnimationIn = new TranslateAnimation(
                Animation.RELATIVE_TO_SELF, 0.0f,
                Animation.RELATIVE_TO_SELF, 0.0f,
                Animation.RELATIVE_TO_SELF, 1.0f,
                Animation.RELATIVE_TO_SELF, 0.0f);//向上移动出现

        TranslateAnimation translateAnimationOut = new TranslateAnimation(
                Animation.RELATIVE_TO_SELF, 0.0f,
                Animation.RELATIVE_TO_SELF, 0.0f,
                Animation.RELATIVE_TO_SELF, 0.0f,
                Animation.RELATIVE_TO_SELF, -1.0f); //向上移动消失
        translateAnimationIn.setDuration(animDuration);
        translateAnimationOut.setDuration(animDuration);

        // 动画集-- 进入动画
        AnimationSet animationInSet = new AnimationSet(false);
        animationInSet.addAnimation(translateAnimationIn);


        // 动画集-- 退出动画
        AnimationSet animationOutSet = new AnimationSet(false);
        animationOutSet.addAnimation(translateAnimationOut);

        if (isSetAlphaAnim) {
            //设置淡入淡出动画
            animationInSet.addAnimation(animationIn);
            animationOutSet.addAnimation(animationOut);
        }

        setInAnimation(animationInSet);
        setOutAnimation(animationOutSet);
    }


    /**
     * 设置循环滚动的View数组
     *
     * @param views
     */
    public void setViews(final List<View> views) {
        if (views == null || views.size() == 0) return;
        removeAllViews();
        for (int i = 0; i < views.size(); i++) {
            final int position = i;
            //设置监听回调
            views.get(i).setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (onItemClickListener != null) {
                        onItemClickListener.onItemClick(position, views.get(position));
                    }
                }
            });
            addView(views.get(i));
        }
        startFlipping();
    }

    /**
     * 点击回调
     */
    private OnItemClickListener onItemClickListener;

    /**
     * 设置监听接口
     *
     * @param onItemClickListener
     */
    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
        this.onItemClickListener = onItemClickListener;
    }

    /**
     * item_view的接口
     */
    public interface OnItemClickListener {
        void onItemClick(int position, View view);
    }
}