package sj.keyboard.widget; import android.content.Context; import android.text.TextUtils; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.HorizontalScrollView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import com.keyboard.view.R; import java.io.IOException; import java.util.ArrayList; import sj.keyboard.data.PageSetEntity; import sj.keyboard.utils.imageloader.ImageLoader; public class EmoticonsToolBarView extends RelativeLayout { protected LayoutInflater mInflater; protected Context mContext; protected ArrayList<View> mToolBtnList = new ArrayList<>(); protected int mBtnWidth; protected HorizontalScrollView hsv_toolbar; protected LinearLayout ly_tool; public EmoticonsToolBarView(Context context) { this(context, null); } public EmoticonsToolBarView(Context context, AttributeSet attrs) { super(context, attrs); mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mInflater.inflate(R.layout.view_emoticonstoolbar, this); this.mContext = context; mBtnWidth = (int) context.getResources().getDimension(R.dimen.bar_tool_btn_width); hsv_toolbar = (HorizontalScrollView) findViewById(R.id.hsv_toolbar); ly_tool = (LinearLayout) findViewById(R.id.ly_tool); } @Override public void addView(View child, int index, ViewGroup.LayoutParams params) { super.addView(child, index, params); if (getChildCount() > 3) { throw new IllegalArgumentException("can host only two direct child"); } } public void addFixedToolItemView(View view, boolean isRight) { LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); LayoutParams hsvParams = (LayoutParams) hsv_toolbar.getLayoutParams(); if (view.getId() <= 0) { view.setId(isRight ? R.id.id_toolbar_right : R.id.id_toolbar_left); } if (isRight) { params.addRule(ALIGN_PARENT_RIGHT); hsvParams.addRule(LEFT_OF, view.getId()); } else { params.addRule(ALIGN_PARENT_LEFT); hsvParams.addRule(RIGHT_OF, view.getId()); } addView(view, params); hsv_toolbar.setLayoutParams(hsvParams); } protected View getCommonItemToolBtn() { return mInflater == null ? null : mInflater.inflate(R.layout.item_toolbtn, null); } protected void initItemToolBtn(View toolBtnView, int rec, final PageSetEntity pageSetEntity, OnClickListener onClickListener){ ImageView iv_icon = (ImageView) toolBtnView.findViewById(R.id.iv_icon); if (rec > 0) { iv_icon.setImageResource(rec); } LinearLayout.LayoutParams imgParams = new LinearLayout.LayoutParams(mBtnWidth, LayoutParams.MATCH_PARENT); iv_icon.setLayoutParams(imgParams); if (pageSetEntity != null) { iv_icon.setTag(R.id.id_tag_pageset, pageSetEntity); try { ImageLoader.getInstance(mContext).displayImage(pageSetEntity.getIconUri(), iv_icon); } catch (IOException e) { e.printStackTrace(); } } toolBtnView.setOnClickListener(onClickListener != null ? onClickListener : new OnClickListener() { @Override public void onClick(View view) { if (mItemClickListeners != null && pageSetEntity != null) { mItemClickListeners.onToolBarItemClick(pageSetEntity); } } }); } protected View getToolBgBtn(View parentView) { return parentView.findViewById(R.id.iv_icon); } public void addFixedToolItemView(boolean isRight, int rec, final PageSetEntity pageSetEntity, OnClickListener onClickListener) { View toolBtnView = getCommonItemToolBtn(); LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); LayoutParams hsvParams = (LayoutParams) hsv_toolbar.getLayoutParams(); if (toolBtnView.getId() <= 0) { toolBtnView.setId(isRight ? R.id.id_toolbar_right : R.id.id_toolbar_left); } if (isRight) { params.addRule(ALIGN_PARENT_RIGHT); hsvParams.addRule(LEFT_OF, toolBtnView.getId()); } else { params.addRule(ALIGN_PARENT_LEFT); hsvParams.addRule(RIGHT_OF, toolBtnView.getId()); } addView(toolBtnView, params); hsv_toolbar.setLayoutParams(hsvParams); initItemToolBtn(toolBtnView, rec, pageSetEntity, onClickListener); } public void addToolItemView(PageSetEntity pageSetEntity) { addToolItemView(0, pageSetEntity, null); } public void addToolItemView(int rec, OnClickListener onClickListener) { addToolItemView(rec, null, onClickListener); } public void addToolItemView(int rec, final PageSetEntity pageSetEntity, OnClickListener onClickListener) { View toolBtnView = getCommonItemToolBtn(); initItemToolBtn(toolBtnView, rec, pageSetEntity, onClickListener); ly_tool.addView(toolBtnView); mToolBtnList.add(getToolBgBtn(toolBtnView)); } public void setToolBtnSelect(String uuid) { if (TextUtils.isEmpty(uuid)) { return; } int select = 0; for (int i = 0; i < mToolBtnList.size(); i++) { Object object = mToolBtnList.get(i).getTag(R.id.id_tag_pageset); if (object != null && object instanceof PageSetEntity && uuid.equals(((PageSetEntity) object).getUuid())) { mToolBtnList.get(i).setBackgroundColor(getResources().getColor(R.color.toolbar_btn_select)); select = i; } else { mToolBtnList.get(i).setBackgroundResource(R.drawable.btn_toolbtn_bg); } } scrollToBtnPosition(select); } protected void scrollToBtnPosition(final int position) { int childCount = ly_tool.getChildCount(); if (position < childCount) { hsv_toolbar.post(new Runnable() { @Override public void run() { int mScrollX = hsv_toolbar.getScrollX(); int childX = ly_tool.getChildAt(position).getLeft(); if (childX < mScrollX) { hsv_toolbar.scrollTo(childX, 0); return; } int childWidth = ly_tool.getChildAt(position).getWidth(); int hsvWidth = hsv_toolbar.getWidth(); int childRight = childX + childWidth; int scrollRight = mScrollX + hsvWidth; if (childRight > scrollRight) { hsv_toolbar.scrollTo(childRight - scrollRight, 0); return; } } }); } } public void setBtnWidth(int width) { mBtnWidth = width; } protected OnToolBarItemClickListener mItemClickListeners; public interface OnToolBarItemClickListener { void onToolBarItemClick(PageSetEntity pageSetEntity); } public void setOnToolBarItemClickListener(OnToolBarItemClickListener listener) { this.mItemClickListeners = listener; } }