码迷,mamicode.com
首页 > 移动开发 > 详细

安卓常用 widget

时间:2015-01-13 17:19:24      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

验证码

技术分享
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

标签:

原文地址:http://www.cnblogs.com/qiuyang1/p/4221721.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!