MovieItem.java 7.25 KB
/*
 * Copyright (c) 2016 wugian
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.xgimi.gimicinema.view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.nineoldandroids.animation.AnimatorSet;
import com.nineoldandroids.animation.ObjectAnimator;
import com.xgimi.gimicinema.R;

public class MovieItem extends LinearLayout implements View.OnFocusChangeListener {

    private ImageView imageView;
    private ImageView playIv;
    private MarqueeTextView title;
    private TextView type;
    private TextView rate;
    private LinearLayout otherLyt;
//    private LinearLayout hideMsgLlyt;

    private AnimatorSet setBig;
    private AnimatorSet setSmall;

    //    private Animation showAnimation;
    private Drawable selected, normal;
    private boolean isBig = false;
    private boolean hasAnimation = false;

    private OnViewSelectListener listener;

    public interface OnViewSelectListener {
        void onOwnSelect(View view);
    }

    public void setOnViewSelectListener(OnViewSelectListener listener) {
        this.listener = listener;
    }

    public MovieItem(Context context) {
        this(context, null);
    }

    public MovieItem(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public MovieItem(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        LayoutInflater.from(context).inflate(R.layout.i_recommend_item_mi, this, true);
        setFocusable(true);
        setFocusableInTouchMode(true);
        setClickable(true);
        setClipToPadding(false);
        setClipChildren(false);
        setWillNotDraw(false);
        title = (MarqueeTextView) findViewById(R.id.name_tv);
        type = (TextView) findViewById(R.id.type_tv);
        rate = (TextView) findViewById(R.id.length_tv);
        otherLyt = (LinearLayout) findViewById(R.id.msg_lyt);
//        hideMsgLlyt = (LinearLayout) findViewById(R.id.hideMsg_llyt);
        imageView = (ImageView) findViewById(R.id.imageView);
        playIv = (ImageView) findViewById(R.id.play_iv);
        selected = getResources().getDrawable(R.drawable.shadow);
        normal = getResources().getDrawable(R.drawable.trans);
//        showAnimation = new TranslateAnimation(0, 0, -1, 1);
//        showAnimation.setDuration(2 * 100);

    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        onDrawShadow(canvas, isFocused());
    }

    public boolean dispatchKeyEvent(KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_UP) {
            startAnimation(true);
        }
        return super.dispatchKeyEvent(event);
    }

    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        if (getParent() instanceof ViewGroup) {
            ((ViewGroup) getParent()).setClipChildren(false);
            ((ViewGroup) getParent()).setClipToPadding(false);
        }
    }

    public ImageView getImageView() {
        return imageView;
    }

    public TextView getTitle() {
        return title;
    }

    public TextView getType() {
        return type;
    }

    public TextView getRate() {
        return rate;
    }

    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus) {
            ((View) getParent()).invalidate();
        }
        startAnimation(hasFocus);
    }

    @Override
    public void startAnimation(Animation animation) {
        if (animation != null)
            super.startAnimation(animation);
        else
            startAnimation(true);
    }

    public void setHasAnimation(boolean hasAnimation) {
        this.hasAnimation = hasAnimation;
        if (hasAnimation) {
            setBig = new AnimatorSet();
            setBig.playTogether(
                    ObjectAnimator.ofFloat(this, "scaleX", 1f, 1.16f),
                    ObjectAnimator.ofFloat(this, "scaleY", 1f, 1.16f));
            setBig.setDuration(2 * 100);
            setSmall = new AnimatorSet();
            setSmall.playTogether(
                    ObjectAnimator.ofFloat(this, "scaleX", 1.16f, 1f),
                    ObjectAnimator.ofFloat(this, "scaleY", 1.16f, 1f));
            setSmall.setDuration(100);
            setOnFocusChangeListener(this);
        } else {
            setOnFocusChangeListener(null);
        }
    }

    public void startAnimation(boolean big) {
        if (hasAnimation) {
            if (big) {
                if (!isBig) {
//                    hideMsgLlyt.startAnimation(showAnimation);
                    if (!TextUtils.isEmpty(type.getText().toString())) {
                        type.setVisibility(VISIBLE);
                    }
                    if (!TextUtils.isEmpty(type.getText().toString())) {
                        rate.setVisibility(VISIBLE);
                    }
                    isBig = true;
                    setSmall.cancel();
                    title.setMarquee(true);
                    setBig.start();
                    otherLyt.setBackgroundColor(getResources().getColor(R.color.main_red));
                    playIv.setBackgroundResource(R.drawable.ic_play_focus);
                    if (listener != null) {
                        listener.onOwnSelect(this);
                    }
                }
            } else {
                if (isBig) {
                    type.setVisibility(GONE);
                    rate.setVisibility(GONE);
                    title.setMarquee(false);
                    setBig.cancel();
                    isBig = false;
                    setSmall.start();
                    playIv.setBackgroundResource(R.drawable.ic_play_normal);
                    otherLyt.setBackgroundColor(getResources().getColor(R.color.main_gray));
                }
            }
        }
    }

    private void onDrawShadow(Canvas canvas, boolean hasFocus) {
        Drawable drawableShadow;
        if (hasFocus) {
            drawableShadow = selected;
        } else {
            drawableShadow = normal;
        }

        if (drawableShadow != null) {
            int width = imageView.getWidth();
            int height = imageView.getHeight();
            Rect padding = new Rect();
            drawableShadow.getPadding(padding);
            drawableShadow.setBounds(-padding.left, imageView.getTop(),
                    width + padding.right,
                    height + padding.bottom);
            drawableShadow.draw(canvas);
        }
    }

}