撸一个最简单的条件选择器picker(不联动)

用过各种时间选择器,地址选择器等等,但是有的时候需要一个类似身高体重,性别年龄的选择器,这种就是我下面所要说的不联动选择器,网上很多demo也有这种效果但是大多是封装完善的万能选择器,你如果抽取出来的话代码量就太多了,对于项目来说得不偿失,于是我写一个最简单的条件选择器。
思路很简单,底部我们使用一个dialog上面加上两个WheelView就可以了,看代码:

public class BottomDialog extends DialogFragment implements View.OnClickListener{
    WheelView npHeight;
    WheelView npWeight;
    TextView mCancel;
    TextView mSure;
    private static final List<String> HEIGHTS = new ArrayList<String>();
    private static final List<String> WEIGHTS = new ArrayList<String>();
    static {
        for (int i=150;i<=200;i++){
            HEIGHTS.add(i+"cm");
        }
        for (int i=40;i<=150;i++){
            WEIGHTS.add(i+"kg");
        }
    }
    public static BottomDialog newInstance() {

        Bundle args = new Bundle();

        BottomDialog fragment = new BottomDialog();
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onStart() {
        super.onStart();
        Window window = getDialog().getWindow();
        WindowManager.LayoutParams params = window.getAttributes();
        params.gravity = Gravity.BOTTOM;
        params.width = WindowManager.LayoutParams.MATCH_PARENT;
        window.setAttributes(params);
        window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
        View view = inflater.inflate(R.layout.fragment_bottom_sheet,container,false);
        mCancel=(TextView) view.findViewById(R.id.tv_cancel);
        mSure=(TextView) view.findViewById(R.id.tv_sure);
        mCancel.setOnClickListener(this);
        mSure.setOnClickListener(this);
        npHeight=(WheelView)view.findViewById(R.id.wl_cm);
        npWeight=(WheelView)view.findViewById(R.id.wl_kg);
        initValue();
        slideToUp(view);
        return view;
    }
    private String mHight=150+"cm";
    private String mWight=40+"kg";
    private void initValue() {
            npHeight.setOffset(1);
            npHeight.setItems(HEIGHTS);
            npHeight.setOnWheelViewListener(new WheelView.OnWheelViewListener() {
                @Override
                public void onSelected(int selectedIndex, String item) {
                    mHight=item;
                }
            });

            npWeight.setOffset(1);
            npWeight.setItems(WEIGHTS);
            npWeight.setOnWheelViewListener(new WheelView.OnWheelViewListener() {
                @Override
                public void onSelected(int selectedIndex, String item) {
                    mWight=item;
                }
            });
    }

    public  void slideToUp(View view){
        Animation slide = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f,
                Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
                1.0f, Animation.RELATIVE_TO_SELF, 0.0f);

        slide.setDuration(400);
        slide.setFillAfter(true);
        slide.setFillEnabled(true);
        view.startAnimation(slide);

        slide.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {

            }

            @Override
            public void onAnimationEnd(Animation animation) {

            }

            @Override
            public void onAnimationRepeat(Animation animation) {

            }
        });

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.tv_cancel:
                this.dismiss();
                break;
            case R.id.tv_sure:
                EventBus.getDefault().post(new TestBean(mHight,mWight));
                this.dismiss();
                break;

        }
    }


}

布局:

<?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="@android:color/white"
    android:orientation="vertical"
    >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp">
        <TextView
            android:id="@+id/tv_cancel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_marginLeft="14dp"
            android:textSize="15sp"
            android:textColor="@color/blue"
            android:text="取消"
            />
        <TextView
            android:id="@+id/tv_sure"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_marginRight="14dp"
            android:textSize="15sp"
            android:textColor="@color/blue"
            android:text="确定"
            />


    </RelativeLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center">
        <WheelView
            android:id="@+id/wl_cm"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

        <WheelView
            android:id="@+id/wl_kg"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </LinearLayout>

</LinearLayout>

实现就是这么简单O(∩_∩)O哈哈~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值