验证码
public class SpinnerImg extends ImageView { /** * 完成选择后启动另外一个spinner */ private ItemListener itemListener; private Context mContext; /** 下拉PopupWindow */ private UMSpinnerDropDownItems mPopupWindow; /** 下拉布局文件 */ private LinearLayout layout; /** 下拉布局文件创建监听器 */ private ViewCreatedListener mViewCreatedListener; public SpinnerImg(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initButton(context); } public SpinnerImg(Context context, AttributeSet attrs) { super(context, attrs); initButton(context); } public SpinnerImg(Context context, final LinearLayout layout, ViewCreatedListener mViewCreatedListener) { super(context); setResIdAndViewCreatedListener(layout, mViewCreatedListener); initButton(context); } private void initButton(Context context) { this.mContext = context; // UMSpinnerButton监听事件 setOnClickListener(new UMSpinnerButtonOnClickListener()); } public PopupWindow getPopupWindow() { return mPopupWindow; } public void setPopupWindow(UMSpinnerDropDownItems mPopupWindow) { this.mPopupWindow = mPopupWindow; } public LinearLayout getResId() { return layout; } /** * @Description: TODO 隐藏下拉布局 */ public void dismiss() { mPopupWindow.dismiss(); } /** * @Description: TODO 设置下拉布局文件,及布局文件创建监听器 * @param @param mResId 下拉布局文件ID * @param @param mViewCreatedListener 布局文件创建监听器 */ public void setResIdAndViewCreatedListener(LinearLayout layout, ViewCreatedListener mViewCreatedListener) { this.mViewCreatedListener = mViewCreatedListener; // 下拉布局文件id this.layout = layout; // 初始化PopupWindow mPopupWindow = new UMSpinnerDropDownItems(mContext); } /** * UMSpinnerButton的点击事件 */ class UMSpinnerButtonOnClickListener implements View.OnClickListener { @Override public void onClick(View v) { if (mPopupWindow != null) { if (!mPopupWindow.isShowing()) { // 设置PopupWindow弹出,退出样式 mPopupWindow.setAnimationStyle(R.style.Animation_dropdown); // 计算popupWindow下拉x轴的位置 int lx = (SpinnerImg.this.getWidth() - mPopupWindow.getmViewWidth() - 7) / 2; // showPopupWindow mPopupWindow.showAsDropDown(SpinnerImg.this, lx, -5); } } } } /** * @ClassName UMSpinnerDropDownItems * @Description TODO 下拉界面 */ public class UMSpinnerDropDownItems extends PopupWindow { private Context mContext; /** 下拉视图的宽度 */ private int mViewWidth; /** 下拉视图的高度 */ private int mViewHeight; public UMSpinnerDropDownItems(Context context) { super(context); this.mContext = context; loadViews(); } /** * @Description: TODO 加载布局文件 * @param * @return void * @throws */ private void loadViews() { // 布局加载器加载布局文件 final View v = layout; // 计算view宽高 onMeasured(v); // 必须设置 setWidth(LayoutParams.WRAP_CONTENT); setHeight(LayoutParams.WRAP_CONTENT); setContentView(v); setFocusable(true); // 设置布局创建监听器,以便在实例化布局控件对象 if (mViewCreatedListener != null) { mViewCreatedListener.onViewCreated(v); } } /** * @Description: TODO 计算View长宽 * @param @param v */ private void onMeasured(View v) { int w = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); int h = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); v.measure(w, h); mViewWidth = v.getMeasuredWidth(); mViewHeight = v.getMeasuredHeight(); } public int getmViewWidth() { return mViewWidth; } public void setmViewWidth(int mViewWidth) { this.mViewWidth = mViewWidth; } public int getmViewHeight() { return mViewHeight; } public void setmViewHeight(int mViewHeight) { this.mViewHeight = mViewHeight; } } /** * @ClassName ViewCreatedListener * @Description TODO 布局创建监听器,实例化布局控件对象 * @author kenny * @date 2012-8-15 */ public interface ViewCreatedListener { void onViewCreated(View v); } public void handleClick(int position) { this.dismiss(); itemListener.endItemSelect(position); } public void setFinishListener(ItemListener itemListener) { this.itemListener = itemListener; } // 接口回调数据 public static interface ItemListener { void endItemSelect(int position); } /** * * @param arryList * spinner里面的数组 * @param whichSpinner * 这个是哪个spinner被选择的 * */ public void loadListData(final LinkedList<String[]> arryList) { this.setResIdAndViewCreatedListener(creatlayout(arryList), new SpinnerImg.ViewCreatedListener() { @Override public void onViewCreated(View v) { for (int i = 0; i < arryList.size(); i++) { layout.getChildAt(i).setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { SpinnerImg.this.handleClick(Integer .valueOf(v.getTag() .toString())); } }); layout.getChildAt(i).setTag(i); } } }); } /** * 创建列表布局 * */ public LinearLayout creatlayout(LinkedList<String[]> arryList) { LinearLayout layout = new LinearLayout(getContext()); layout.setOrientation(LinearLayout.VERTICAL); layout.setBackgroundColor(Color.WHITE); for (int i = 0; i < arryList.size(); i++) { TextView tv = new TextView(getContext()); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( OnlyYouHelpMe.Dp2Px(getContext(), 100), OnlyYouHelpMe.Dp2Px(getContext(), 40)); tv.setLayoutParams(params); tv.setTextColor(Color.BLACK); tv.setGravity(Gravity.CENTER); Drawable drawable = getResources().getDrawable(R.drawable.line_absolute); Drawable bg = getResources().getDrawable(R.drawable.bg_text_gray); tv.setBackgroundDrawable(bg); drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); tv.setCompoundDrawables(null, null, null, drawable); tv.setPadding(5, 0, 5, 0); tv.setText(arryList.get(i)[0]); layout.addView(tv); } return layout; } }
时间: 2024-10-05 11:40:26