本文实例为大家分享了android自定义滚轴选择器的具体代码,供大家参考,具体内容如下
效果图:
点击选择餐具弹出底部弹窗
代码语言:javascript复制 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中的样式:
代码语言:javascript复制 <!-- 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
代码语言:javascript复制<?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:
代码语言:javascript复制<?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:
代码语言:javascript复制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);
}
}
代码语言:javascript复制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显示:
代码语言:javascript复制@Override
public void onSelected(PickValueView view, Object leftValue, Object middleValue, Object rightValue) {
String selectedStr = (String) leftValue;
tv_cj_num.setText(selectedStr);
}
完成,自定义弹窗里可以修改一些属性。
以上就是本文的全部内容,希望对大家的学习有所帮助。