package com.metis.base.widget.dock;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.support.annotation.DrawableRes;
import android.support.annotation.StringRes;
import android.support.v4.app.Fragment;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
import android.widget.LinearLayout;
import com.metis.base.R;
import java.util.HashMap;
import java.util.Map;
/**
* Created by WJ on 2015/6/23.
*/
public class DockBar extends LinearLayout {
//private List<Dock> mDockList = new ArrayList<Dock>();
private Map<Dock, DockItemView> mDockMap = new HashMap<Dock, DockItemView>();
private OnDockItemClickListener mOnDockItemClickListener = null;
private View mCurrentView = null;
public DockBar(Context context) {
this(context, null);
}
public DockBar(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public DockBar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initDockBar(context);
}
private void initDockBar (Context context) {
this.setOrientation(LinearLayout.HORIZONTAL);
this.setGravity(Gravity.CENTER);
}
public int size () {
return mDockMap.size();
}
public void addDock (final Dock dock) {
if (!mDockMap.containsKey(dock)) {
final DockItemView itemView = new DockItemView(this.getContext());
mDockMap.put(dock, itemView);
itemView.setDock(dock);
LinearLayout.LayoutParams params = new LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.CENTER;
params.weight = 1;
itemView.setTextColor(getResources().getColorStateList(R.color.dock_item_text_color));
this.addView(itemView, params);
itemView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
selectDock(dock);
}
});
}
}
public void selectDock (Dock dock) {
if (!mDockMap.containsKey(dock)) {
return;
}
View view = mDockMap.get(dock);
if (mCurrentView != null) {
mCurrentView.setSelected(false);
}
view.setSelected(true);
mCurrentView = view;
if (view != null && mOnDockItemClickListener != null) {
mOnDockItemClickListener.onDockClick(view, dock);
}
}
public void setOnDockItemClickListener (OnDockItemClickListener listener) {
mOnDockItemClickListener = listener;
}
public static class Dock {
public int id;
public Drawable icon;
public String title;
public Fragment target;
public Dock (int id, Drawable icon, String title, Fragment target) {
this.id = id;
this.icon = icon;
this.title = title;
this.target = target;
}
public Dock (Context context, int id, @DrawableRes int drawableId, @StringRes int stringId, Fragment target) {
this.id = id;
this.icon = context.getResources().getDrawable(drawableId);
this.title = context.getString(stringId);
this.target = target;
}
@Override
public boolean equals(Object o) {
if (o != null && o instanceof Dock) {
return ((Dock) o).id == id;
}
return false;
}
}
public static interface OnDockItemClickListener {
public void onDockClick (View view, Dock dock);
}
}