package com.mobidev.newsapp.materialtabhost;
/**
* Created by lawrence on 2/23/15.
*/
import java.util.Locale;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.mobidev.newsapp.R;
@SuppressLint({"InflateParams", "ClickableViewAccessibility"})
/**
* A simple Tab with Material Design style
* @author neokree
*
*/
public class MaterialTab implements View.OnTouchListener {
private final static int REVEAL_DURATION = 400;
private final static int HIDE_DURATION = 500;
private View completeView;
private ImageView icon;
private TextView text;
private ImageView selector;
private Resources res;
private MaterialTabListener listener;
private Drawable iconDrawable;
private int textColor;
private int iconColor;
private int primaryColor;
private int accentColor;
private boolean active;
private int position;
private boolean hasIcon;
private float density;
private Point lastTouchedPoint;
public MaterialTab(Context ctx, boolean hasIcon) {
this.hasIcon = hasIcon;
density = ctx.getResources().getDisplayMetrics().density;
res = ctx.getResources();
if (!hasIcon) {
completeView = LayoutInflater.from(ctx).inflate(R.layout.tab, null);
text = (TextView) completeView.findViewById(R.id.text);
} else {
completeView = LayoutInflater.from(ctx).inflate(R.layout.tab_icon, null);
icon = (ImageView) completeView.findViewById(R.id.icon);
}
selector = (ImageView) completeView.findViewById(R.id.selector);
// set the listener
completeView.setOnTouchListener(this);
active = false;
textColor = Color.WHITE; // default white text
iconColor = Color.WHITE; // and icon
}
public void setAccentColor(int color) {
this.accentColor = color;
this.textColor = color;
this.iconColor = color;
}
public void setPrimaryColor(int color) {
this.primaryColor = color;
completeView.setBackgroundColor(color);
}
public void setTextColor(int color) {
textColor = color;
if (text != null) {
text.setTextColor(color);
}
}
public void setIconColor(int color) {
this.iconColor = color;
if (this.icon != null)
this.icon.setColorFilter(color);
}
public MaterialTab setText(CharSequence text) {
if (hasIcon)
throw new RuntimeException("You had setted tabs with icons, uses icons instead text");
this.text.setText(text.toString().toUpperCase(Locale.US));
return this;
}
public MaterialTab setIcon(Drawable icon) {
if (!hasIcon)
throw new RuntimeException("You had setted tabs without icons, uses text instead icons");
iconDrawable = icon;
this.icon.setImageDrawable(icon);
this.setIconColor(this.iconColor);
return this;
}
public void disableTab() {
// set 60% alpha to text color
if (text != null)
this.text.setTextColor(Color.argb(0x99, Color.red(textColor), Color.green(textColor), Color.blue(textColor)));
// set 60% alpha to icon
if (icon != null)
setIconAlpha(0x99);
// set transparent the selector view
this.selector.setBackgroundColor(res.getColor(android.R.color.transparent));
active = false;
if (listener != null)
listener.onTabUnselected(this);
}
public void activateTab() {
// set full color text
if (text != null)
this.text.setTextColor(textColor);
// set 100% alpha to icon
if (icon != null)
setIconAlpha(0xFF);
// set accent color to selector view
this.selector.setBackgroundColor(accentColor);
active = true;
}
public boolean isSelected() {
return active;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
lastTouchedPoint = new Point();
lastTouchedPoint.x = (int) event.getX();
lastTouchedPoint.y = (int) event.getY();
if (event.getAction() == MotionEvent.ACTION_DOWN) {
completeView.setBackgroundColor(Color.argb(0x80, Color.red(accentColor), Color.green(accentColor), Color.blue(accentColor)));
// do nothing
return true;
}
if (event.getAction() == MotionEvent.ACTION_CANCEL) {
completeView.setBackgroundColor(primaryColor);
return true;
}
// new effects
if (event.getAction() == MotionEvent.ACTION_UP) {
completeView.setBackgroundColor(primaryColor);
// set the click
if (listener != null) {
if (active) {
// if the tab is active when the user click on it it will be reselect
listener.onTabReselected(this);
} else {
listener.onTabSelected(this);
}
}
// if the tab is not activated, it will be active
if (!active)
this.activateTab();
return true;
}
return false;
}
public View getView() {
return completeView;
}
public MaterialTab setTabListener(MaterialTabListener listener) {
this.listener = listener;
return this;
}
public MaterialTabListener getTabListener() {
return listener;
}
public int getPosition() {
return position;
}
public void setPosition(int position) {
this.position = position;
}
@SuppressLint({"NewApi"})
private void setIconAlpha(int paramInt) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
this.icon.setImageAlpha(paramInt);
return;
}
this.icon.setColorFilter(Color.argb(paramInt, Color.red(this.iconColor), Color.green(this.iconColor), Color.blue(this.iconColor)));
}
private int getTextLenght() {
String textString = text.getText().toString();
Rect bounds = new Rect();
Paint textPaint = text.getPaint();
textPaint.getTextBounds(textString, 0, textString.length(), bounds);
return bounds.width();
}
private int getIconWidth() {
return (int) (density * 24);
}
public int getTabMinWidth() {
if (hasIcon) {
return getIconWidth();
} else {
return getTextLenght();
}
}
}