package com.flyco.dialog.widget; import android.content.Context; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.util.TypedValue; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.DecelerateInterpolator; import android.view.animation.LayoutAnimationController; import android.view.animation.TranslateAnimation; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import com.flyco.dialog.entity.DialogMenuItem; import com.flyco.dialog.listener.OnOperItemClickL; import com.flyco.dialog.utils.CornerUtils; import com.flyco.dialog.widget.base.BaseDialog; import java.util.ArrayList; public class NormalListDialog extends BaseDialog<NormalListDialog> { /** ListView */ private ListView mLv; /** title */ private TextView mTvTitle; /** corner radius,dp(圆角程度,单位dp) */ private float mCornerRadius = 5; /** title background color(标题背景颜色) */ private int mTitleBgColor = Color.parseColor("#303030"); /** title text(标题) */ private String mTitle = "提示"; /** title textcolor(标题颜色) */ private int mTitleTextColor = Color.parseColor("#ffffff"); /** title textsize(标题字体大小,单位sp) */ private float mTitleTextSize = 16.5f; /** ListView background color(ListView背景色) */ private int mLvBgColor = Color.parseColor("#ffffff"); /** divider color(ListView divider颜色) */ private int mDividerColor = Color.LTGRAY; /** divider height(ListView divider高度) */ private float mDividerHeight = 0.8f; /** item press color(ListView item按住颜色) */ private int mItemPressColor = Color.parseColor("#ffcccccc"); /** item textcolor(ListView item文字颜色) */ private int mItemTextColor = Color.parseColor("#303030"); /** item textsize(ListView item文字大小) */ private float mItemTextSize = 15f; /** item extra padding(ListView item额外padding) */ private int mItemExtraLeft; private int mItemExtraTop; private int mItemExtraRight; private int mItemExtraBottom; /** enable title show(是否显示标题) */ private boolean mIsTitleShow = true; /** adapter(自定义适配器) */ private BaseAdapter mAdapter; /** operation items(操作items) */ private ArrayList<DialogMenuItem> mContents = new ArrayList<>(); private OnOperItemClickL mOnOperItemClickL; private LayoutAnimationController mLac; public void setOnOperItemClickL(OnOperItemClickL onOperItemClickL) { mOnOperItemClickL = onOperItemClickL; } public NormalListDialog(Context context, ArrayList<DialogMenuItem> baseItems) { super(context); mContents.addAll(baseItems); init(); } public NormalListDialog(Context context, String[] items) { super(context); mContents = new ArrayList<>(); for (String item : items) { DialogMenuItem customBaseItem = new DialogMenuItem(item, 0); mContents.add(customBaseItem); } init(); } public NormalListDialog(Context context, BaseAdapter adapter) { super(context); mAdapter = adapter; init(); } private void init() { widthScale(0.8f); /** LayoutAnimation */ TranslateAnimation animation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 2f, Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF, 0); animation.setInterpolator(new DecelerateInterpolator()); animation.setDuration(550); mLac = new LayoutAnimationController(animation, 0.12f); mLac.setInterpolator(new DecelerateInterpolator()); } @Override public View onCreateView() { LinearLayout ll_container = new LinearLayout(mContext); ll_container.setOrientation(LinearLayout.VERTICAL); /** title */ mTvTitle = new TextView(mContext); mTvTitle.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); mTvTitle.setSingleLine(true); mTvTitle.setPadding(dp2px(18), dp2px(10), 0, dp2px(10)); ll_container.addView(mTvTitle); /** listview */ mLv = new ListView(mContext); mLv.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); mLv.setCacheColorHint(Color.TRANSPARENT); mLv.setFadingEdgeLength(0); mLv.setVerticalScrollBarEnabled(false); mLv.setSelector(new ColorDrawable(Color.TRANSPARENT)); ll_container.addView(mLv); return ll_container; } @SuppressWarnings("deprecation") @Override public void setUiBeforShow() { /** title */ float radius = dp2px(mCornerRadius); mTvTitle.setBackgroundDrawable(CornerUtils.cornerDrawable(mTitleBgColor, new float[]{radius, radius, radius, radius, 0, 0, 0, 0})); mTvTitle.setText(mTitle); mTvTitle.setTextSize(TypedValue.COMPLEX_UNIT_SP, mTitleTextSize); mTvTitle.setTextColor(mTitleTextColor); mTvTitle.setVisibility(mIsTitleShow ? View.VISIBLE : View.GONE); /** listview */ mLv.setDivider(new ColorDrawable(mDividerColor)); mLv.setDividerHeight(dp2px(mDividerHeight)); if (mIsTitleShow) { mLv.setBackgroundDrawable(CornerUtils.cornerDrawable(mLvBgColor, new float[]{0, 0, 0, 0, radius, radius, radius, radius})); } else { mLv.setBackgroundDrawable(CornerUtils.cornerDrawable(mLvBgColor, radius)); } if (mAdapter == null) { mAdapter = new ListDialogAdapter(); } mLv.setAdapter(mAdapter); mLv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (mOnOperItemClickL != null) { mOnOperItemClickL.onOperItemClick(parent, view, position, id); } } }); mLv.setLayoutAnimation(mLac); } /** set title background color(设置标题栏背景色) @return NormalListDialog */ public NormalListDialog titleBgColor(int titleBgColor) { mTitleBgColor = titleBgColor; return this; } /** set title text(设置标题内容) */ public NormalListDialog title(String title) { mTitle = title; return this; } /** set title textsize(设置标题字体大小) */ public NormalListDialog titleTextSize_SP(float titleTextSize_SP) { mTitleTextSize = titleTextSize_SP; return this; } /** set title textcolor(设置标题字体颜色) */ public NormalListDialog titleTextColor(int titleTextColor) { mTitleTextColor = titleTextColor; return this; } /*** enable title show(设置标题是否显示) */ public NormalListDialog isTitleShow(boolean isTitleShow) { mIsTitleShow = isTitleShow; return this; } /** set ListView background color(设置ListView背景) */ public NormalListDialog lvBgColor(int lvBgColor) { mLvBgColor = lvBgColor; return this; } /** set corner radius(设置圆角程度,单位dp) */ public NormalListDialog cornerRadius(float cornerRadius_DP) { mCornerRadius = cornerRadius_DP; return this; } /** set divider color(ListView divider颜色) */ public NormalListDialog dividerColor(int dividerColor) { mDividerColor = dividerColor; return this; } /** set divider height(ListView divider高度) */ public NormalListDialog dividerHeight(float dividerHeight_DP) { mDividerHeight = dividerHeight_DP; return this; } /** set item press color(item按住颜色) */ public NormalListDialog itemPressColor(int itemPressColor) { mItemPressColor = itemPressColor; return this; } /** set item textcolor(item字体颜色) */ public NormalListDialog itemTextColor(int itemTextColor) { mItemTextColor = itemTextColor; return this; } /** set item textsize(item字体大小) */ public NormalListDialog itemTextSize(float itemTextSize_SP) { mItemTextSize = itemTextSize_SP; return this; } /** set item height(item高度) */ public NormalListDialog setItemExtraPadding(int itemLeft, int itemTop, int itemRight, int itemBottom) { mItemExtraLeft = dp2px(itemLeft); mItemExtraTop = dp2px(itemTop); mItemExtraRight = dp2px(itemRight); mItemExtraBottom = dp2px(itemBottom); return this; } /** set layoutAnimation(设置layout动画 ,传入null将不显示layout动画) */ public NormalListDialog layoutAnimation(LayoutAnimationController lac) { mLac = lac; return this; } class ListDialogAdapter extends BaseAdapter { @Override public int getCount() { return mContents.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return position; } @SuppressWarnings("deprecation") @Override public View getView(int position, View convertView, ViewGroup parent) { final DialogMenuItem item = mContents.get(position); LinearLayout llItem = new LinearLayout(mContext); llItem.setOrientation(LinearLayout.HORIZONTAL); llItem.setGravity(Gravity.CENTER_VERTICAL); ImageView ivItem = new ImageView(mContext); ivItem.setPadding(0, 0, dp2px(15), 0); llItem.addView(ivItem); TextView tvItem = new TextView(mContext); tvItem.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); tvItem.setSingleLine(true); tvItem.setTextColor(mItemTextColor); tvItem.setTextSize(TypedValue.COMPLEX_UNIT_SP, mItemTextSize); llItem.addView(tvItem); float radius = dp2px(mCornerRadius); if (mIsTitleShow) { llItem.setBackgroundDrawable((CornerUtils.listItemSelector(radius, Color.TRANSPARENT, mItemPressColor, position == mContents.size() - 1))); } else { llItem.setBackgroundDrawable(CornerUtils.listItemSelector(radius, Color.TRANSPARENT, mItemPressColor, mContents.size(), position)); } int left = item.mResId == 0 ? dp2px(18) : dp2px(16); int top = dp2px(10); int right = 0; int bottom = dp2px(10); llItem.setPadding(left + mItemExtraLeft, top + mItemExtraTop, right + mItemExtraRight, bottom + mItemExtraBottom); ivItem.setImageResource(item.mResId); tvItem.setText(item.mOperName); ivItem.setVisibility(item.mResId == 0 ? View.GONE : View.VISIBLE); return llItem; } } }