android开发分享Android PickerScrollView滑动选择控件使用方法详解 |
您所在的位置:网站首页 › android滑动选择 › android开发分享Android PickerScrollView滑动选择控件使用方法详解 |
android开发分享Android PickerScrollView滑动选择控件使用方法详解
34189784
•
2022年4月20日 下午6:52
•
andiord开发 •
阅读 9
本文实例为大家分享了android pickerscrollview滑动选择控件的具体使用代码,供大家参考,具体内容如下先看一下效果图1.selectbean模拟假数据public class sel android开发分享Android PickerScrollView滑动选择控件使用方法详解实例为大家分享了android pickerscrollview滑动选择控件的具体使用代码,供大家参考,具体内容如下 上述就是android开发分享Android PickerScrollView滑动选择控件使用方法详解的全部内容,如果对大家有所用处且需要了解更多关于Android学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com) 先看一下效果图 ![]() 1.selectbean模拟假数据 public class selectbean { /** * ret : 0 * msg : succes * datas : [{"id":"0","categoryname":"本人","state":"1"},{"id":"1","categoryname":"父亲","state":"1"},{"id":"2","categoryname":"母亲","state":"1"},{"id":"3","categoryname":"配偶","state":"1"},{"id":"4","categoryname":"孩子","state":"1"},{"id":"5","categoryname":"其他","state":"1"}] */ private int ret; private string msg; private list datas; public int getret() { return ret; } public void setret(int ret) { this.ret = ret; } public string getmsg() { return msg; } public void setmsg(string msg) { this.msg = msg; } public list getdatas() { return datas; } public void setdatas(list datas) { this.datas = datas; } public static class datasbean { /** * id : 0 * categoryname : 本人 * state : 1 */ private string id; private string categoryname; private string state; public string getid() { return id; } public void setid(string id) { this.id = id; } public string getcategoryname() { return categoryname; } public void setcategoryname(string categoryname) { this.categoryname = categoryname; } public string getstate() { return state; } public void setstate(string state) { this.state = state; } } }2.popupwindow public class commonpopwindow { private static popupwindow mpopupwindow; private static builder mbuilder; private static view mcontentview; private static window mwindow; public interface viewclicklistener { void getchildview(popupwindow mpopupwindow, view view, int mlayoutresid); } private commonpopwindow() { mbuilder = new builder(); } public static builder newbuilder() { if (mbuilder == null) { mbuilder = new builder(); } return mbuilder; } /** * 获取popupwindow宽度 * * @return */ public int getwidth() { if (mpopupwindow != null) { return mcontentview.getmeasuredwidth(); } return 0; } /** * 获取popupwindow高度 * * @return */ public int getheight() { if (mpopupwindow != null) { return mcontentview.getmeasuredheight(); } return 0; } /** * 显示在控件的下方 */ public commonpopwindow showdownpop(view parent) { if (parent.getvisibility() == view.gone) { mpopupwindow.showatlocation(parent, gravity.no_gravity, 0, 0); } else { int[] location = new int[2]; parent.getlocationonscreen(location); if (mpopupwindow != null) { mpopupwindow.showatlocation(parent, gravity.no_gravity, location[0], location[1] + parent.getheight()); } } return this; } /** * 显示在控件的上方 */ public commonpopwindow showasup(view view) { if (view.getvisibility() == view.gone) { mpopupwindow.showatlocation(view, gravity.no_gravity, 0, 0); } else { int[] location = new int[2]; view.getlocationonscreen(location); if (mpopupwindow != null) { mpopupwindow.showatlocation(view, gravity.no_gravity, location[0], location[1] - view.getheight()); //方式二 // mpopupwindow.showasdropdown(view, 0, -(getheight() + view.getmeasuredheight())); } } return this; } /** * 显示在控件的左边 */ public commonpopwindow showasleft(view view) { if (view.getvisibility() == view.gone) { mpopupwindow.showatlocation(view, gravity.no_gravity, 0, 0); } else { int[] location = new int[2]; view.getlocationonscreen(location); if (mpopupwindow != null) { mpopupwindow.showatlocation(view, gravity.no_gravity, location[0] - getwidth(), location[1]); } } return this; } /** * 显示在控件右边 */ public commonpopwindow showasright(view view) { if (view.getvisibility() == view.gone) { mpopupwindow.showatlocation(view, gravity.no_gravity, 0, 0); } else { int[] location = new int[2]; view.getlocationonscreen(location); if (mpopupwindow != null) { mpopupwindow.showatlocation(view, gravity.no_gravity, location[0] + view.getwidth(), location[1]); } } return this; } /** * 显示控件下方 * * @param view * @return */ public commonpopwindow showasdown(view view) { if (mpopupwindow != null) { mpopupwindow.showasdropdown(view); } return this; } /** * 全屏弹出 */ public commonpopwindow showasbottom(view view) { if (view.getvisibility() == view.gone) { mpopupwindow.showatlocation(view, gravity.no_gravity, 0, 0); } else { int[] location = new int[2]; view.getlocationonscreen(location); if (mpopupwindow != null) { mpopupwindow.showatlocation(view, gravity.bottom, 0, 0); } } return this; } public commonpopwindow showatlocation(view anchor, int gravity, int x, int y) { if (mpopupwindow != null) { mpopupwindow.showatlocation(anchor, gravity, x, y); } return this; } /** * 取消 */ public static void dismiss() { if (mwindow != null) { windowmanager.layoutparams params = mwindow.getattributes(); params.alpha = 1.0f; mwindow.setattributes(params); } if (mpopupwindow != null && mpopupwindow.isshowing()) mpopupwindow.dismiss(); } /* * ---------------------builder------------------------- */ public static class builder implements popupwindow.ondismisslistener { private context mcontext; private int mlayoutresid;//布局id private int mwidth, mheight;//弹窗宽高 private int manimationstyle;//动画样式 private viewclicklistener mlistener;//子view监听回调 private drawable mdrawable;//背景drawable private boolean mtouchable = true;//是否相应touch事件 private boolean mfocusable = true;//是否获取焦点 private boolean moutsidetouchable = true;//设置外部是否点击 private boolean mbackgrounddarkenable = false;//是否背景窗体变暗 private float mdarkalpha = 1.0f;//透明值 public commonpopwindow build(context context) { this.mcontext = context; commonpopwindow popwindow = new commonpopwindow(); apply(); if (mlistener != null && mlayoutresid != 0) { mlistener.getchildview(mpopupwindow, mcontentview, mlayoutresid); } return popwindow; } private void apply() { if (mlayoutresid != 0) { mcontentview = layoutinflater.from(mcontext).inflate(mlayoutresid, null); } if (mwidth != 0 && mheight != 0) { mpopupwindow = new popupwindow(mcontentview, mwidth, mheight); } else { mpopupwindow = new popupwindow(mcontentview, viewgroup.layoutparams.wrap_content, viewgroup.layoutparams.wrap_content); } mpopupwindow.settouchable(mtouchable); mpopupwindow.setfocusable(mfocusable); mpopupwindow.setoutsidetouchable(moutsidetouchable); if (mdrawable != null) { mpopupwindow.setbackgrounddrawable(mdrawable); } else { mpopupwindow.setbackgrounddrawable(new colordrawable()); } if (manimationstyle != -1) { mpopupwindow.setanimationstyle(manimationstyle); } if (mwidth == 0 || mheight == 0) { measurewidthandheight(mcontentview); //如果没有设置高度的情况下,设置宽高并赋值 mwidth = mpopupwindow.getcontentview().getmeasuredwidth(); mheight = mpopupwindow.getcontentview().getmeasuredheight(); } activity activity = (activity) mcontext; if (activity != null && mbackgrounddarkenable) { float alpha = (mdarkalpha >= 0f || mdarkalpha margin_alpha * mmintextsize / 2) { // 往下滑超过离开距离 movetailtohead(); mmovelen = mmovelen - margin_alpha * mmintextsize; } else if (mmovelen < -margin_alpha * mmintextsize / 2) { // 往上滑超过离开距离 moveheadtotail(); mmovelen = mmovelen + margin_alpha * mmintextsize; } mlastdowny = event.gety(); invalidate(); } private void doup(motionevent event) { // 抬起手后mcurrentselected的位置由当前位置move到中间选中位置 if (math.abs(mmovelen) < 0.0001) { mmovelen = 0; return; } if (mtask != null) { mtask.cancel(); mtask = null; } mtask = new mytimertask(updatehandler); timer.schedule(mtask, 0, 10); } class mytimertask extends timertask { handler handler; public mytimertask(handler handler) { this.handler = handler; } @override public void run() { handler.sendmessage(handler.obtainmessage()); } } public interface onselectlistener { void onselect(selectbean.datasbean pickers); } }5.activity_main.xml布局 6.mainactivity public class mainactivity extends appcompatactivity implements view.onclicklistener,commonpopwindow.viewclicklistener { private textview click; private textview text; private string categoryname; private list datas; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); initview(); initdata(); initlistener(); } private void initlistener() { click.setonclicklistener(this); } private void initdata() { //模拟请求后台返回数据 string response = "{"ret":0,"msg":"succes,","datas":[{"id":" 0","categoryname":"本人","state":"1"},{"id":"1","categoryname":"父亲","state":"1"},{"id":"2","categoryname":"母亲","state":"1"},{"id":"3","categoryname":"配偶","state":"1"},{"id":"4","categoryname":"其他","state":"1"}]}"; selectbean selectbean = new gson().fromjson(response, selectbean.class); //0请求表示成功 if (selectbean.getret() == 0) { //滚动选择数据集合 datas = selectbean.getdatas(); } } private void initview() { click = findviewbyid(r.id.textclick); text = findviewbyid(r.id.text); } @override public void onclick(view v) { switch (v.getid()) { case r.id.textclick: setaddressselectorpopup(v); break; } } /** * 将选择器放在底部弹出框 * @param v */ private void setaddressselectorpopup(view v) { int screenheigh = getresources().getdisplaymetrics().heightpixels; commonpopwindow.newbuilder() .setview(r.layout.pop_picker_selector_bottom) // .setanimationstyle(r.style.animup) .setbackgrounddrawable(new bitmapdrawable()) .setsize(viewgroup.layoutparams.match_parent, math.round(screenheigh * 0.3f)) .setviewonclicklistener(this) .setbackgrounddarkenable(true) .setbackgroundalpha(0.7f) .setbackgrounddrawable(new colordrawable(999999)) .build(this) .showasbottom(v); } @override public void getchildview(final popupwindow mpopupwindow, view view, int mlayoutresid) { switch (mlayoutresid) { case r.layout.pop_picker_selector_bottom: textview imagebtn = view.findviewbyid(r.id.img_guanbi); pickerscrollview addressselector = view.findviewbyid(r.id.address); // 设置数据,默认选择第一条 addressselector.setdata(datas); addressselector.setselected(0); //滚动监听 addressselector.setonselectlistener(new pickerscrollview.onselectlistener() { @override public void onselect(selectbean.datasbean pickers) { categoryname = pickers.getcategoryname(); } }); //完成按钮 imagebtn.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { mpopupwindow.dismiss(); if (categoryname==null){ text.settext(datas.get(2).getcategoryname()); toast.maketext(mainactivity.this, "默认第一条", toast.length_short).show(); }else { text.settext(categoryname); toast.maketext(mainactivity.this, "滚动选择", toast.length_short).show(); } } }); break; } } }以上就是android开发分享Android PickerScrollView滑动选择控件使用方法详解的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。 本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。 如若转载,请注明出处:https://www.ssfiction.com/adkf/1080436.html Android PickerScrollView滑动选择控件android开发android开发教程android教程android软件开发 赞 (0) |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |