package com.tv.ui.metro.view;
import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.ValueAnimator;
import android.content.Context;
import android.content.Intent;
import android.graphics.Paint;
import android.graphics.Rect;
import android.net.Uri;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.*;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.VolleyHelper;
import com.tv.ui.metro.R;
import com.tv.ui.metro.model.DisplayItem;
import com.tv.ui.metro.model.DisplayItem.UI;
import com.tv.ui.metro.model.Image;
import com.tv.ui.metro.model.Image.Ani;
import java.util.ArrayList;
import java.util.List;
public class RecommendCardView extends RelativeLayout {
private static String TAG = "RecommendCardView";
protected CenterIconImage mBackView;
protected CenterIconImage mFrontView;
protected CenterIconImage mSubView;
protected CenterIconImage mIconView;
public ImageView mOperationView;
public TextView mBannerTextView;
public TextView mLabelTextView;
public static int ITEM_NORMAL_SIZE = -1;
public static int ITEM_H_WIDTH = -1;
public static int ITEM_H_HEIGHT = -1;
public static int ITEM_V_WIDTH = -1;
public static int ITEM_V_HEIGHT = -1;
public static int ANIMATION_OFFSET_Y = 0;
private int base_res_id;
private int default_background_id;
private boolean showBannerText = false;
private DisplayItem mItem;
private AnimatorSet mAnimatorSet;
private ImageLoader mImageLoader;
public RecommendCardView bindData(DisplayItem _content) {
mItem = _content;
showBannerText = UI.METRO_CELL_BANNER.equals(mItem._ui.type);
if (!showBannerText) {
mLabelTextView.setText(mItem.name);
mLabelTextView.setVisibility(VISIBLE);
}
bindImageLayer(mItem.images.icon(), mIconView);
bindImageLayer(mItem.images.text(), mSubView);
bindImageLayer(mItem.images.spirit(), mFrontView);
bindBackground();
return this;
}
public DisplayItem getContentData(){
return mItem;
}
public RecommendCardView(Context context, int viewType) {
super(context);
switch (viewType) {
case MetroLayout.Vertical:
base_res_id = R.layout.metro_vertical_item;
default_background_id = R.drawable.icon_v_default;
break;
case MetroLayout.Horizontal:
base_res_id = R.layout.metro_horizontal_item;
default_background_id = R.drawable.icon_h_default;
break;
case MetroLayout.Normal:
base_res_id = R.layout.base_metro_item;
default_background_id = R.drawable.icon_normal_default;
break;
default:
base_res_id = R.layout.base_metro_item;
default_background_id = R.drawable.icon_normal_default;
break;
}
init(context);
if (mBackView != null) {
mBackView.setOnImageChangedListener(mImageChangedListener);
}
mImageLoader = VolleyHelper.getInstance(getContext()).getImageLoader();
}
public RecommendCardView(Context context) {
super(context);
base_res_id = R.layout.base_metro_item;
default_background_id = R.drawable.icon_normal_default;
init(context);
if (mBackView != null) {
mBackView.setOnImageChangedListener(mImageChangedListener);
}
}
private void bindAnimations() {
mAnimatorSet = new AnimatorSet();
if (mItem.images.spirit() != null && mItem.images.spirit().ani != null) {
List<ValueAnimator> animators = getAnimators(mItem.images.spirit().ani, mFrontView);
for (ValueAnimator animator : animators) {
mAnimatorSet.play(animator);
}
}
if (mItem.images.text() != null && mItem.images.text().ani != null) {
List<ValueAnimator> animators = getAnimators(mItem.images.text().ani, mSubView);
for (ValueAnimator animator : animators) {
mAnimatorSet.play(animator);
}
}
}
private void bindImageLayer(Image image, ImageView view) {
if (image == null || TextUtils.isEmpty(image.url)) {
if(view == null){
Log.d(TAG, "why here");
}
view.setVisibility(View.GONE);
return;
}
view.setVisibility(View.VISIBLE);
if (image.pos != null) {
ViewGroup.MarginLayoutParams layoutParams = (MarginLayoutParams) view.getLayoutParams();
layoutParams.leftMargin = image.pos.x;
layoutParams.topMargin = getHeight()-image.pos.y-ANIMATION_OFFSET_Y;
view.setLayoutParams(layoutParams);
}
mImageLoader.get(image.url, ImageLoader.getImageListener(view, 0, 0));
}
/**
* 设置焦点状态 引发动画
*/
@Override
public void setSelected(boolean selected) {
super.setSelected(selected);
if (selected) {
// 获得焦点动画
startAnimation();
} else {
// 失去焦点动画 恢复正常状态动画
reverseAnimation();
}
}
private void startAnimation() {
if (mAnimatorSet == null) {
bindAnimations();
} else {
mAnimatorSet.cancel();
}
mAnimatorSet.start();
}
private void reverseAnimation() {
if (mAnimatorSet == null) {
return;
}
mAnimatorSet.cancel();
for (Animator animator : mAnimatorSet.getChildAnimations()) {
ValueAnimator valueAnimator = (ValueAnimator) animator;
valueAnimator.reverse();
}
}
private Interpolator getInterpolator(int type) {
Interpolator result = AnimatorModel.DEFAULT_INTERPOLATOR;
switch (type) {
case Image.Ani.INTERPOLATOR_ACCELERATEDECELERATE:
result = new AccelerateDecelerateInterpolator();
break;
case Image.Ani.INTERPOLATOR_ACCELERATE:
result = new AccelerateInterpolator();
break;
case Image.Ani.INTERPOLATOR_DECELERATE:
result = new DecelerateInterpolator();
break;
case Image.Ani.INTERPOLATOR_LINEAR:
result = new LinearInterpolator();
break;
case Image.Ani.INTERPOLATOR_BOUNCE:
result = new BounceInterpolator();
break;
default:
break;
}
return result;
}
private List<ValueAnimator> getAnimators(Ani ani, View view) {
List<ValueAnimator> animators = new ArrayList<ValueAnimator>();
if (ani.scale != null) {
ScaleAnimatorModel scaleAnimatorModel = new ScaleAnimatorModel(view);
scaleAnimatorModel.setInterpolator(getInterpolator(ani.scale.interpolator));
scaleAnimatorModel.setDuration(ani.scale.duration);
scaleAnimatorModel.setStartDelay(ani.scale.startDelay);
scaleAnimatorModel.setPivotX(ani.scale.pivotX);
scaleAnimatorModel.setPivotY(ani.scale.pivotY);
scaleAnimatorModel.setScale(ani.scale.scale_size);
return scaleAnimatorModel.toAnimators();
} else if (ani.translate != null) {
TranslateAnimatorModel translateAnimatorModel = new TranslateAnimatorModel(view);
translateAnimatorModel.setInterpolator(getInterpolator(ani.translate.interpolator));
translateAnimatorModel.setDuration(ani.translate.duration);
translateAnimatorModel.setStartDelay(ani.translate.startDelay);
translateAnimatorModel.setXDelta(ani.translate.x_delta);
translateAnimatorModel.setYDelta(ani.translate.y_delta);
return translateAnimatorModel.toAnimators();
} else {
return animators;
}
}
public boolean isSelected() {
return super.isSelected();
}
private void bindBackground() {
if (useBgColor() || useBgImage()) {
return;
} else {
mBackView.setBackgroundResource(default_background_id);
}
}
private boolean useBgColor() {
Image back = mItem.images.back();
if (back == null) {
return false;
}
return false;
// if (back.bgcolor <= 0) {
// return false;
// }
//
// mBackView.setBackgroundColor(back.bgcolor);
// return true;
}
private boolean useBgImage() {
Image back = mItem.images.back();
if (back == null) {
return false;
}
if (TextUtils.isEmpty(back.url)) {
return false;
}
mImageLoader.get(back.url, ImageLoader.getCommonViewImageListener(mBackView,
default_background_id, default_background_id));
return true;
}
// 游戏操控类型
protected void bindOperateView(int type) {
mOperationView.setVisibility(View.GONE);
}
// 倒影
protected ImageChangedListener mImageChangedListener = new ImageChangedListener() {
@Override
public void onImageChanged(ImageView view) {
if (null == view) {
return;
}
}
};
public int cardWidth() {
initDimens();
int width = 0;
if (mItem._ui.layout.w == 2) {
width = ITEM_H_WIDTH;
} else {
if (mItem._ui.layout.h == 2) {
width = ITEM_V_WIDTH;
} else {
width = ITEM_NORMAL_SIZE;
}
}
return width;
}
protected void init(Context context) {
initDimens();
this.setClipChildren(true);
View view = LayoutInflater.from(context).inflate(base_res_id, this);
mOperationView = (ImageView) view.findViewById(R.id.handler_image_view);
mBannerTextView = (TextView) view.findViewById(R.id.recommend_textview);
mLabelTextView = (TextView) view.findViewById(R.id.labelTextView);
mBackView = (CenterIconImage) view.findViewById(R.id.back_ground_imageview);
mBannerTextView.setVisibility(View.INVISIBLE);
OnClickListener mClick = RecommendCardViewClickListenerFactory.getInstance().getRecommendCardViewClickListener();
this.setOnClickListener(mClick==null?clickListener:mClick);
mFrontView = (CenterIconImage) view.findViewById(R.id.front_ground_imageview);
mSubView = (CenterIconImage) view.findViewById(R.id.sub_ground_imageview);
mIconView = (CenterIconImage) view.findViewById(R.id.icon_imageview);
if(mIconView == null){
Log.d(TAG, "why come here");
}
Paint paint = new Paint();
paint.setAntiAlias(true);
/// mBannerTextView.setLayerType(View.LAYER_TYPE_SOFTWARE,paint);
// mLabelTextView.setLayerType(View.LAYER_TYPE_SOFTWARE,paint);
}
OnClickListener clickListener = new OnClickListener() {
@Override
public void onClick(View v) {
try {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("micontent://" + mItem.ns + "/" + mItem.type + "?rid="
+ mItem.id));
intent.putExtra("item", mItem);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
v.getContext().startActivity(intent);
// TODO
// ReportManager.getInstance().send(Report.createReport(ReportType.STATISTICS,StaticsType.PAGE_RECOMMEND,
// null, null, mRecommendInfo.modActionUrl, null, null, null));
} catch (Exception ne) {
ne.printStackTrace();
}
}
};
@Override
protected void onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect) {
super.onFocusChanged(gainFocus, direction, previouslyFocusedRect);
if (gainFocus) {
if (showBannerText) {
mBannerTextView.setText(mItem.name);
mBannerTextView.setVisibility(View.VISIBLE);
mLabelTextView.setScaleX(1.1f);
mLabelTextView.setScaleY(1.1f);
}
setSelected(true);
} else {
mBannerTextView.setVisibility(View.INVISIBLE);
setSelected(false);
mLabelTextView.setScaleX(1.0f);
mLabelTextView.setScaleY(1.0f);
}
}
private void initDimens() {
if (ITEM_NORMAL_SIZE == -1) {
ITEM_NORMAL_SIZE = getResources().getDimensionPixelSize(R.dimen.ITEM_NORMAL_SIZE);
ITEM_H_WIDTH = getResources().getDimensionPixelSize(R.dimen.ITEM_H_WIDTH);
ITEM_H_HEIGHT = getResources().getDimensionPixelSize(R.dimen.ITEM_H_HEIGHT);
ITEM_V_WIDTH = getResources().getDimensionPixelSize(R.dimen.ITEM_V_WIDTH);
ITEM_V_HEIGHT = getResources().getDimensionPixelSize(R.dimen.ITEM_V_HEIGHT);
ANIMATION_OFFSET_Y = getResources().getDimensionPixelSize(R.dimen.animation_offset_y);
}
}
}