博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
安卓常用 widget
阅读量:6909 次
发布时间:2019-06-27

本文共 7431 字,大约阅读时间需要 24 分钟。

验证码

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
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
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

 

转载于:https://www.cnblogs.com/qiuyang1/p/4221721.html

你可能感兴趣的文章
读Zepto源码之样式操作
查看>>
我的友情链接
查看>>
MyBatis 整合 Spring开发
查看>>
HTML互动视频教程
查看>>
深入浅出Future Pattern
查看>>
微信公众平台企业号回调模式的URL验证
查看>>
平台常用函数介绍
查看>>
公司讲座
查看>>
惆怅,诸事不顺
查看>>
Lambda架构与推荐在电商网站实践
查看>>
Docker Swarm与Apache Mesos的区别
查看>>
消息中间件保证消息一致性解决方案
查看>>
java内嵌浏览器DJNativeSwing
查看>>
Php学习
查看>>
寓意很深刻的故事
查看>>
Confluence 6 权限概述
查看>>
Android小白的探索:2D绘图之Android简易版Microsoft Visio学习之路 三、装饰者模式...
查看>>
现代操作系统--引论
查看>>
Unix Study之--AIX安装和配置SSH
查看>>
C++ priority_queue用法(大顶堆,小顶堆)
查看>>