首页 > 系统 > Android > 正文

android自定义滚轴选择器

2019-12-12 00:08:11
字体:
来源:转载
供稿:网友

本文实例为大家分享了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显示:

@Overridepublic void onSelected(PickValueView view, Object leftValue, Object middleValue, Object rightValue) { String selectedStr = (String) leftValue; tv_cj_num.setText(selectedStr);}

完成,自定义弹窗里可以修改一些属性。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表