android自定义滚轴选择器
程序员文章站
2022-04-09 13:40:27
本文实例为大家分享了android自定义滚轴选择器的具体代码,供大家参考,具体内容如下
效果图:
点击选择餐具弹出底部弹窗
private dial...
本文实例为大家分享了android自定义滚轴选择器的具体代码,供大家参考,具体内容如下
效果图:
点击选择餐具弹出底部弹窗
private dialog dialog; private view inflate; pickvalueview pickstring; case r.id.rl_cj_num://餐具数量选择 //选择对话框 dialog = new dialog(this, r.style.actionsheetdialogstyle); view contentview = layoutinflater.from(this).inflate(r.layout.dialog_cj_num, null); //获取组件 tv_cancel = contentview.findviewbyid(r.id.tv_cancel); pickstring = contentview.findviewbyid(r.id.pickstring); //获取dialog的监听 tv_cancel.setonclicklistener(this); pickstring.setonselectedchangelistener(this); string[] valuestr = new string[]{"无需餐具", "1人", "2人", "3人", "4人", "5人", "6人", "7人", "8人"}; pickstring.setvaluedata(valuestr, valuestr[1]); dialog.setcontentview(contentview); viewgroup.layoutparams layoutparams = contentview.getlayoutparams(); layoutparams.width = getresources().getdisplaymetrics().widthpixels; contentview.setlayoutparams(layoutparams); dialog.getwindow().setgravity(gravity.bottom);//弹窗位置 dialog.getwindow().setwindowanimations(r.style.actionsheetdialogstyle);//弹窗样式 dialog.show();//显示弹窗 break;
styles.xml中的样式:
<!-- dialog弹窗效果--> <style name="actionsheetdialogstyle" parent="@android:style/theme.dialog"> <!-- 背景透明 --> <item name="android:windowbackground">@android:color/transparent</item> <item name="android:windowcontentoverlay">@null</item> <!-- 浮于activity之上 --> <item name="android:windowisfloating">true</item> <!-- 边框 --> <item name="android:windowframe">@null</item> <!-- dialog以外的区域模糊效果 --> <item name="android:backgrounddimenabled">true</item> <!-- 无标题 --> <item name="android:windownotitle">true</item> <!-- 半透明 --> <item name="android:windowistranslucent">true</item> <!-- dialog进入及退出动画 --> <item name="android:windowanimationstyle">@style/actionsheetdialoganimation</item> </style> <!-- actionsheet进出动画 --> <style name="actionsheetdialoganimation" parent="@android:style/animation.dialog"> <item name="android:windowenteranimation">@anim/actionsheet_dialog_in</item> <item name="android:windowexitanimation">@anim/actionsheet_dialog_out</item> </style> <style name="splashtheme" parent="apptheme"> <!-- 这里的trans自己写一个#00000000即可--> <item name="android:windowbackground">@drawable/layer_splash</item> <item name="windownotitle">true</item> <item name="android:windowfullscreen">true</item> </style>
弹入弹出动画效果:
anim下新建:弹入资源文件actionsheet_dialog_in和弹出资源文件actionsheet_dialog_out
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="200" android:fromydelta="100%" android:toydelta="0" /> <?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="200" android:fromydelta="0" android:toydelta="100%" />
自定义弹窗布局dialog_cj_num:
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#f9f9f9" android:orientation="vertical"> <textview android:layout_width="match_parent" android:layout_height="40dp" android:gravity="center" android:text="餐具选择" android:textcolor="#333333" android:textsize="16sp" /> <view android:layout_width="match_parent" android:layout_height="1dp" android:background="#e8e8e8" /> <com.shanjing.mymeishi.view.pickvalueview android:id="@+id/pickstring" android:layout_width="match_parent" android:layout_height="wrap_content" /> <view android:layout_width="match_parent" android:layout_height="1dp" android:background="#e8e8e8" /> <textview android:id="@+id/tv_cancel" android:layout_width="match_parent" android:layout_height="40dp" android:gravity="center" android:text="取消" android:textcolor="#333333" android:textsize="16sp" /> </linearlayout>
自定义视图pickvalueview和引用类mynumberpicker:
package com.shanjing.mymeishi.view; import android.content.context; import android.graphics.color; import android.util.attributeset; import android.view.gravity; import android.view.viewgroup; import android.widget.linearlayout; import android.widget.numberpicker; import android.widget.textview; /** * 选择日期视图 */ public class pickvalueview extends linearlayout implements numberpicker.onvaluechangelistener { private context mcontext; /** * 组件 标题、单位、滚轮 */ private textview mtitleleft, mtitlemiddle, mtitleright; private textview munitleft, munitmiddle, munitright; private mynumberpicker mnpleft, mnpmiddle, mnpright; /** * 数据个数 1列 or 2列 or 3列 */ private int mviewcount = 1; /** * 一组数据长度 */ private final int data_size = 3; /** * 需要设置的值与默认值 */ private object[] mleftvalues; private object[] mmiddlevalues; private object[] mrightvalues; private object mdefaultleftvalue; private object mdefaultmiddlevalue; private object mdefaultrightvalue; /** * 当前正在显示的值 */ private object[] mshowingleft = new object[data_size]; private object[] mshowingmiddle = new object[data_size]; private object[] mshowingright = new object[data_size]; /** * 步长 */ private int mleftstep = 5; private int mmiddlestep = 1; private int mrightstep = 1; /** * 回调接口对象 */ private onselectedchangelistener mselectedchangelistener; public pickvalueview(context context) { super(context); this.mcontext = context; generateview(); } public pickvalueview(context context, attributeset attrs) { super(context, attrs); this.mcontext = context; generateview(); } public pickvalueview(context context, attributeset attrs, int defstyleattr) { super(context, attrs, defstyleattr); this.mcontext = context; generateview(); } /** * 生成视图 */ private void generateview() { //标题 linearlayout titlelayout = new linearlayout(mcontext); layoutparams titleparams = new layoutparams(viewgroup.layoutparams.match_parent, viewgroup.layoutparams.wrap_content); titleparams.setmargins(0, 0, 0, dip2px(12)); titlelayout.setlayoutparams(new layoutparams(viewgroup.layoutparams.match_parent, viewgroup.layoutparams.wrap_content)); titlelayout.setorientation(horizontal); mtitleleft = new textview(mcontext); mtitlemiddle = new textview(mcontext); mtitleright = new textview(mcontext); layoutparams params = new layoutparams(0, viewgroup.layoutparams.wrap_content, 1); textview[] titles = new textview[]{mtitleleft, mtitlemiddle, mtitleright}; for (int i = 0; i < titles.length; i++) { titles[i].setlayoutparams(params); titles[i].setgravity(gravity.center); titles[i].settextcolor(color.parsecolor("#000000")); titles[i].settextsize(12); } titlelayout.addview(mtitleleft); titlelayout.addview(mtitlemiddle); titlelayout.addview(mtitleright); //内容 linearlayout contentlayout = new linearlayout(mcontext); contentlayout.setlayoutparams(new layoutparams(viewgroup.layoutparams.match_parent, viewgroup.layoutparams.wrap_content)); contentlayout.setorientation(horizontal); contentlayout.setgravity(gravity.center); mnpleft = new mynumberpicker(mcontext); mnpmiddle = new mynumberpicker(mcontext); mnpright = new mynumberpicker(mcontext); munitleft = new textview(mcontext); munitmiddle = new textview(mcontext); munitright = new textview(mcontext); mynumberpicker[] nps = new mynumberpicker[]{mnpleft, mnpmiddle, mnpright}; for (int i = 0; i < nps.length; i++) { nps[i].setlayoutparams(params); nps[i].setdescendantfocusability(focus_block_descendants); nps[i].setonvaluechangedlistener(this); } contentlayout.addview(mnpleft); contentlayout.addview(munitleft); contentlayout.addview(mnpmiddle); contentlayout.addview(munitmiddle); contentlayout.addview(mnpright); contentlayout.addview(munitright); this.setlayoutparams(new layoutparams(viewgroup.layoutparams.match_parent, viewgroup.layoutparams.wrap_content)); this.setorientation(vertical); this.addview(titlelayout); this.addview(contentlayout); } /** * 初始化数据和值 */ private void initviewandpicker() { if (mviewcount == 1) { this.mnpmiddle.setvisibility(gone); this.mnpright.setvisibility(gone); this.munitmiddle.setvisibility(gone); this.munitright.setvisibility(gone); } else if (mviewcount == 2) { this.mnpright.setvisibility(gone); this.munitright.setvisibility(gone); } //初始化数组值 if (mleftvalues != null && mleftvalues.length != 0) { if (mleftvalues.length < data_size) { for (int i = 0; i < mleftvalues.length; i++) { mshowingleft[i] = mleftvalues[i]; } for (int i = mleftvalues.length; i < data_size; i++) { mshowingleft[i] = -9999; } } else { for (int i = 0; i < data_size; i++) { mshowingleft[i] = mleftvalues[i]; } } mnpleft.setminvalue(0); mnpleft.setmaxvalue(data_size - 1); if (mdefaultleftvalue != null) updateleftview(mdefaultleftvalue); else updateleftview(mshowingleft[0]); } /** * 中间控件 */ if (mviewcount == 2 || mviewcount == 3) { if (mmiddlevalues != null && mmiddlevalues.length != 0) { if (mmiddlevalues.length < data_size) { for (int i = 0; i < mmiddlevalues.length; i++) { mshowingmiddle[i] = mmiddlevalues[i]; } for (int i = mmiddlevalues.length; i < data_size; i++) { mshowingmiddle[i] = -9999; } } else { for (int i = 0; i < data_size; i++) { mshowingmiddle[i] = mmiddlevalues[i]; } } mnpmiddle.setminvalue(0); mnpmiddle.setmaxvalue(data_size - 1); if (mdefaultmiddlevalue != null) updatemiddleview(mdefaultmiddlevalue); else updatemiddleview(mshowingmiddle[0]); } } /** * 右侧控件 */ if (mviewcount == 3) { if (mrightvalues != null && mrightvalues.length != 0) { if (mrightvalues.length < data_size) { for (int i = 0; i < mrightvalues.length; i++) { mshowingright[i] = mrightvalues[i]; } for (int i = mrightvalues.length; i < data_size; i++) { mshowingright[i] = -9999; } } else { for (int i = 0; i < data_size; i++) { mshowingright[i] = mrightvalues[i]; } } mnpright.setminvalue(0); mnpright.setmaxvalue(data_size - 1); if (mdefaultrightvalue != null) updaterightview(mdefaultrightvalue); else updaterightview(mshowingright[0]); } } } private void updateleftview(object value) { updatevalue(value, 0); } private void updatemiddleview(object value) { updatevalue(value, 1); } private void updaterightview(object value) { updatevalue(value, 2); } /** * 更新滚轮视图 * * @param value * @param index */ private void updatevalue(object value, int index) { string showstr[] = new string[data_size]; mynumberpicker picker; object[] showingvalue; object[] values; int step; if (index == 0) { picker = mnpleft; showingvalue = mshowingleft; values = mleftvalues; step = mleftstep; } else if (index == 1) { picker = mnpmiddle; showingvalue = mshowingmiddle; values = mmiddlevalues; step = mmiddlestep; } else { picker = mnpright; showingvalue = mshowingright; values = mrightvalues; step = mrightstep; } if (values instanceof integer[]) { for (int i = 0; i < data_size; i++) { showingvalue[i] = (int) value - step * (data_size / 2 - i); int offset = (int) values[values.length - 1] - (int) values[0] + step; if ((int) showingvalue[i] < (int) values[0]) { showingvalue[i] = (int) showingvalue[i] + offset; } if ((int) showingvalue[i] > (int) values[values.length - 1]) { showingvalue[i] = (int) showingvalue[i] - offset; } showstr[i] = "" + showingvalue[i]; } } else { int strindex = 0; for (int i = 0; i < values.length; i++) { if (values[i].equals(value)) { strindex = i; break; } } for (int i = 0; i < data_size; i++) { int temp = strindex - (data_size / 2 - i); if (temp < 0) { temp += values.length; } if (temp >= values.length) { temp -= values.length; } showingvalue[i] = values[temp]; showstr[i] = (string) values[temp]; } } picker.setdisplayedvalues(showstr); picker.setvalue(data_size / 2); picker.postinvalidate(); } @override public void onvaluechange(numberpicker picker, int oldval, int newval) { if (picker == mnpleft) { updateleftview(mshowingleft[newval]); } else if (picker == mnpmiddle) { updatemiddleview(mshowingmiddle[newval]); } else if (picker == mnpright) { updaterightview(mshowingright[newval]); } if (mselectedchangelistener != null) { mselectedchangelistener.onselected(this, mshowingleft[data_size / 2], mshowingmiddle[data_size / 2], mshowingright[data_size / 2]); } } /** * 设置数据--单列数据 * * @param leftvalues * @param mdefaultleftvalue */ public void setvaluedata(object[] leftvalues, object mdefaultleftvalue) { this.mviewcount = 1; this.mleftvalues = leftvalues; this.mdefaultleftvalue = mdefaultleftvalue; initviewandpicker(); } /** * 设置数据--两列数据 * * @param leftvalues * @param mdefaultleftvalue * @param middlevalues * @param defaultmiddlevalue */ public void setvaluedata(object[] leftvalues, object mdefaultleftvalue, object[] middlevalues, object defaultmiddlevalue) { this.mviewcount = 2; this.mleftvalues = leftvalues; this.mdefaultleftvalue = mdefaultleftvalue; this.mmiddlevalues = middlevalues; this.mdefaultmiddlevalue = defaultmiddlevalue; initviewandpicker(); } /** * 设置数据--三列数据 * * @param leftvalues * @param mdefaultleftvalue * @param middlevalues * @param defaultmiddlevalue * @param rightvalues * @param defaultrightvalue */ public void setvaluedata(object[] leftvalues, object mdefaultleftvalue, object[] middlevalues, object defaultmiddlevalue, object[] rightvalues, object defaultrightvalue) { this.mviewcount = 3; this.mleftvalues = leftvalues; this.mdefaultleftvalue = mdefaultleftvalue; this.mmiddlevalues = middlevalues; this.mdefaultmiddlevalue = defaultmiddlevalue; this.mrightvalues = rightvalues; this.mdefaultrightvalue = defaultrightvalue; initviewandpicker(); } /** * 设置左边数据步长 * * @param step */ public void setleftstep(int step) { this.mleftstep = step; initviewandpicker(); } /** * 设置中间数据步长 * * @param step */ public void setmiddlestep(int step) { this.mmiddlestep = step; initviewandpicker(); } /** * 设置右边数据步长 * * @param step */ public void setrightstep(int step) { this.mrightstep = step; initviewandpicker(); } /** * 设置标题 * * @param left * @param middle * @param right */ public void settitle(string left, string middle, string right) { if (left != null) { mtitleleft.setvisibility(visible); mtitleleft.settext(left); } else { mtitleleft.setvisibility(gone); } if (middle != null) { mtitlemiddle.setvisibility(visible); mtitlemiddle.settext(middle); } else { mtitlemiddle.setvisibility(gone); } if (right != null) { mtitleright.setvisibility(visible); mtitleright.settext(right); } else { mtitleright.setvisibility(gone); } this.postinvalidate(); } public void setunitleft(string unitleft) { setunit(unitleft, 0); } public void setmunitmiddle(string unitmiddle) { setunit(unitmiddle, 1); } public void setunitright(string unitright) { setunit(unitright, 2); } private void setunit(string unit, int index) { textview tvunit; if (index == 0) { tvunit = munitleft; } else if (index == 1) { tvunit = munitmiddle; } else { tvunit = munitright; } if (unit != null) { tvunit.settext(unit); } else { tvunit.settext(" "); } initviewandpicker(); } /** * 设置回调 * * @param listener */ public void setonselectedchangelistener(onselectedchangelistener listener) { this.mselectedchangelistener = listener; } /** * dp转px * * @param dp * @return */ private int dip2px(int dp) { float scale = mcontext.getresources().getdisplaymetrics().density; return (int) (scale * dp + 0.5f); } /** * 回调接口 */ public interface onselectedchangelistener { void onselected(pickvalueview view, object leftvalue, object middlevalue, object rightvalue); } }
package com.shanjing.mymeishi.view; import android.content.context; import android.graphics.canvas; import android.graphics.color; import android.graphics.paint; import android.graphics.rect; import android.graphics.drawable.colordrawable; import android.graphics.drawable.drawable; import android.util.attributeset; import android.util.sparsearray; import android.util.typedvalue; import android.view.view; import android.view.viewgroup; import android.widget.edittext; import android.widget.numberpicker; import java.lang.reflect.field; public class mynumberpicker extends numberpicker { private context mcontext; numberpicker picker; public mynumberpicker(context context) { super(context); picker = this; mcontext = context; } public mynumberpicker(context context, attributeset attrs) { super(context, attrs); picker = this; mcontext = context; } public mynumberpicker(context context, attributeset attrs, int defstyleattr) { super(context, attrs, defstyleattr); picker = this; mcontext = context; } @override public void addview(view child) { super.addview(child); updateview(child); } @override public void addview(view child, int index, viewgroup.layoutparams params) { super.addview(child, index, params); updateview(child); } @override public void addview(view child, viewgroup.layoutparams params) { super.addview(child, params); updateview(child); } private void updateview(view view) { if (view instanceof edittext) { ((edittext) view).settextsize(typedvalue.complex_unit_sp, 20); ((edittext) view).settextcolor(color.parsecolor("#000000"));//进入时滚轴显示颜色 } } private int mright, mleft, mbottom; private int mtopselectiondividertop; private int mbottomselectiondividerbottom; private int[] mselectorindices; private int mscrollstate; private sparsearray<string> mselectorindextostringcache; private edittext minputtext; private paint mselectorwheelpaint; private int mselectorelementheight; private int mcurrentscrolloffset; private boolean mhasselectorwheel; private boolean mhidewheeluntilfocused; private drawable mselectiondivider; /** * 通过反射获取值 */ private void getmyvalue() { mleft = super.getleft(); mright = super.getright(); mbottom = super.getbottom(); field[] pickerfields = numberpicker.class.getdeclaredfields(); for (field field : pickerfields) { field.setaccessible(true); if (field.getname().equals("mselectorwheelpaint")) { try { mselectorwheelpaint = (paint) field.get(picker); } catch (illegalaccessexception e) { e.printstacktrace(); } break; } } for (field field : pickerfields) { field.setaccessible(true); if (field.getname().equals("mselectorelementheight")) { try { mselectorelementheight = (int) field.get(picker); } catch (illegalaccessexception e) { e.printstacktrace(); } break; } } for (field field : pickerfields) { field.setaccessible(true); if (field.getname().equals("mcurrentscrolloffset")) { try { mcurrentscrolloffset = (int) field.get(picker); } catch (illegalaccessexception e) { e.printstacktrace(); } break; } } for (field field : pickerfields) { field.setaccessible(true); if (field.getname().equals("minputtext")) { try { minputtext = (edittext) field.get(picker); } catch (illegalaccessexception e) { e.printstacktrace(); } break; } } for (field field : pickerfields) { field.setaccessible(true); if (field.getname().equals("mselectorindextostringcache")) { try { mselectorindextostringcache = (sparsearray<string>) field.get(picker); } catch (illegalaccessexception e) { e.printstacktrace(); } break; } } for (field field : pickerfields) { field.setaccessible(true); if (field.getname().equals("mselectorindices")) { try { mselectorindices = (int[]) field.get(picker); } catch (illegalaccessexception e) { e.printstacktrace(); } break; } } for (field field : pickerfields) { field.setaccessible(true); if (field.getname().equals("mhasselectorwheel")) { try { mhasselectorwheel = (boolean) field.get(picker); } catch (illegalaccessexception e) { e.printstacktrace(); } break; } } for (field field : pickerfields) { field.setaccessible(true); if (field.getname().equals("mhidewheeluntilfocused")) { try { mhidewheeluntilfocused = (boolean) field.get(picker); } catch (illegalaccessexception e) { e.printstacktrace(); } break; } } // for (field field : pickerfields) { // field.setaccessible(true); // if (field.getname().equals("mdecrementvirtualbuttonpressed")) { // try { // mdecrementvirtualbuttonpressed = (boolean) field.get(picker); // } catch (illegalaccessexception e) { // e.printstacktrace(); // } // break; // } // } // for (field field : pickerfields) { // field.setaccessible(true); // if (field.getname().equals("mincrementvirtualbuttonpressed")) { // try { // mincrementvirtualbuttonpressed = (boolean) field.get(picker); // } catch (illegalaccessexception e) { // e.printstacktrace(); // } // break; // } // } // for (field field : pickerfields) { // field.setaccessible(true); // if (field.getname().equals("mvirtualbuttonpresseddrawable")) { // try { // mvirtualbuttonpresseddrawable = (drawable) field.get(picker); // } catch (illegalaccessexception e) { // e.printstacktrace(); // } // break; // } // } for (field field : pickerfields) { field.setaccessible(true); if (field.getname().equals("mscrollstate")) { try { mscrollstate = (int) field.get(picker); } catch (illegalaccessexception e) { e.printstacktrace(); } break; } } for (field field : pickerfields) { field.setaccessible(true); if (field.getname().equals("mtopselectiondividertop")) { try { mtopselectiondividertop = (int) field.get(picker); } catch (illegalaccessexception e) { e.printstacktrace(); } break; } } for (field field : pickerfields) { field.setaccessible(true); if (field.getname().equals("mbottomselectiondividerbottom")) { try { mbottomselectiondividerbottom = (int) field.get(picker); } catch (illegalaccessexception e) { e.printstacktrace(); } break; } } for (field field : pickerfields) { field.setaccessible(true); if (field.getname().equals("mselectiondivider")) { try { mselectiondivider = (drawable) field.get(picker); } catch (illegalaccessexception e) { e.printstacktrace(); } break; } } } @override protected void ondraw(canvas canvas) { // super.ondraw(canvas); getmyvalue(); mselectorwheelpaint.setcolor(color.blue); if (!mhasselectorwheel) { super.ondraw(canvas); return; } final boolean showselectorwheel = mhidewheeluntilfocused ? hasfocus() : true; float x = (mright - mleft) / 2; float y = mcurrentscrolloffset; // if (showselectorwheel && mvirtualbuttonpresseddrawable != null // && mscrollstate == onscrolllistener.scroll_state_idle) { // if (mdecrementvirtualbuttonpressed) { // mvirtualbuttonpresseddrawable.setstate(view.pressed_state_set); // mvirtualbuttonpresseddrawable.setbounds(0, 0, mright, mtopselectiondividertop); // mvirtualbuttonpresseddrawable.draw(canvas); // } // if (mincrementvirtualbuttonpressed) { // mvirtualbuttonpresseddrawable.setstate(pressed_state_set); // mvirtualbuttonpresseddrawable.setbounds(0, mbottomselectiondividerbottom, mright, // mbottom); // mvirtualbuttonpresseddrawable.draw(canvas); // } // } int[] selectorindices = mselectorindices; for (int i = 0; i < selectorindices.length; i++) { int selectorindex = selectorindices[i]; string scrollselectorvalue = mselectorindextostringcache.get(selectorindex); if (i != 1) { mselectorwheelpaint.setcolor(color.black); mselectorwheelpaint.settextsize(sp2px(16)); } else { mselectorwheelpaint.setcolor(color.parsecolor("#000000"));//滑动时当前滚轴上的内容颜色 mselectorwheelpaint.settextsize(sp2px(20)); } if ((showselectorwheel && i != 1) || (i == 1 && minputtext.getvisibility() != visible)) { rect mrect = new rect(); mselectorwheelpaint.gettextbounds(scrollselectorvalue, 0, scrollselectorvalue.length(), mrect); canvas.drawtext(scrollselectorvalue, x, y, mselectorwheelpaint); } y += mselectorelementheight; } // draw the selection dividers if (showselectorwheel && mselectiondivider != null) { mselectiondivider = new colordrawable(color.parsecolor("#a0c4c4c4"));//滚轴线的颜色 // draw the top divider int topoftopdivider = mtopselectiondividertop; int bottomoftopdivider = topoftopdivider + 2; mselectiondivider.setbounds(0, topoftopdivider, mright, bottomoftopdivider); mselectiondivider.draw(canvas); // draw the bottom divider int bottomofbottomdivider = mbottomselectiondividerbottom; int topofbottomdivider = bottomofbottomdivider - 2; mselectiondivider.setbounds(0, topofbottomdivider, mright, bottomofbottomdivider); mselectiondivider.draw(canvas); } } private int sp2px(int sp) { float scale = mcontext.getresources().getdisplaymetrics().scaleddensity; return (int) (scale * sp + 0.5f); } }
用法:
先实现pickvalueview.onselectedchangelistener
然后textview显示:
@override public void onselected(pickvalueview view, object leftvalue, object middlevalue, object rightvalue) { string selectedstr = (string) leftvalue; tv_cj_num.settext(selectedstr); }
完成,自定义弹窗里可以修改一些属性。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。