標籤:
驗證碼
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; }}View Code
安卓常用 widget