欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Android开源项目滚轮选择器WheelPicker的基本用法总结

程序员文章站 2022-03-03 22:01:01
1. 添加依赖在Project的build.gradle中,添加maven { url ‘https:jitpack.io’}在相关Module(一般是Module:app)的build.gradle中,添加implementation 'cn.aigestudio.wheelpicker:WheelPicker:1.1.3'注意不是 implemention ‘com.github.open-android:WheelPicker:v1.0.0’,那篇文章(即百度WheelPicker排第一的简书...

1. 添加依赖

在Project的build.gradle中,添加maven { url 'https:jitpack.io'}
Android开源项目滚轮选择器WheelPicker的基本用法总结
在相关Module(一般是Module:app)的build.gradle中,添加implementation 'cn.aigestudio.wheelpicker:WheelPicker:1.1.3'

注意不是 implemention ‘com.github.open-android:WheelPicker:v1.0.0’,那篇文章(即百度WheelPicker排第一的简书那篇)我个人怀疑有高度借鉴的行为。
Android开源项目滚轮选择器WheelPicker的基本用法总结

2. 基本用法

  1. 在xml文件中设置WheelPicker。

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity"
        android:orientation="vertical">
    
        <com.aigestudio.wheelpicker.WheelPicker
            android:id="@+id/wp"
            android:layout_width="match_parent"
            android:layout_height="200dp"
            android:background="#ffffff"
            app:wheel_item_text_size="16sp"
            />
    
        <Button
            android:id="@+id/btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="btn1"
            android:onClick="onClick"/>
    
    </LinearLayout>
    
  2. 设置一个实体类,模拟实际开发场景。

    public class People {
        private String name;
    
        public People(String name){
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        @Override
        public String toString() {
            return "People{" +
                    "name='" + name + '\'' +
                    '}';
        }
    }
    
  3. 然后在相关的java文件中调用(这里是demo,所以是MainActivity)

    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    
        private static final String TAG = "MainActivity";
        
        WheelPicker wheelPicker;
    
        List<People> list = new ArrayList<>();
    
        @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            wheelPicker = findViewById(R.id.wp);
            initData();
            initWP(); // 必用的方法
            //initWPShow(); //改变各种显示状态的方法
            //initWPText(); //Text相关的显示状态
        }
    
        private void initData() {
            list.add(new People("张三"));
            list.add(new People("李四"));
            list.add(new People("王五"));
            list.add(new People("刘七"));
            list.add(new People("邓八"));
            list.add(new People("赵九"));
        }
    
        private void initWP() {
            // 通过setData方式设置数据集,不过此方法设置的数据在显示时都会被自动转换为String
            // 如果数据传入的是一个类的集合,那显示时就会直接调用他的toString方法,此时就要重写toString。
            wheelPicker.setData(list);
            
            //选择监听器,会监听被选中的item(滑动停止后),需要自己做强制类型转换
            wheelPicker.setOnItemSelectedListener(new WheelPicker.OnItemSelectedListener() {
                @Override
                public void onItemSelected(WheelPicker picker, Object data, int position) {
                    Log.i(TAG, "onItemSelected: " + (People)data + "  " + position);
                }
            });
    
            //获取当前的item,一样要做强制类型转换
            People people = (People) wheelPicker.getData().get(wheelPicker.getCurrentItemPosition());
            Log.i(TAG, "initWP: " + people);
    
    
            //滚轮监听器,滑动状态监听
            wheelPicker.setOnWheelChangeListener(new WheelPicker.OnWheelChangeListener() {
                @Override
                public void onWheelScrolled(int offset) {
                    // 滑动距离,初始状态(即一开始position=0时)为0
                    // 数据往上滑(即手往下滑)为正数,往下滑为负数
                    Log.i(TAG, "onWheelScrolled: " + offset);
                }
    
                @Override
                public void onWheelSelected(int position) {
                    // 等同于选择监听器的onItemSelected,停止滑动时所在的position
                    Log.i(TAG, "onWheelSelected: " + position);
                }
    
                @Override
                public void onWheelScrollStateChanged(int state) {
                    // 滚动状态监听器,0表示没有在滑动,1表示触屏造成的滑动,
                    // 2表示停止触屏时造成的滑动(停止触屏后的回弹)
                    Log.i(TAG, "onWheelScrollStateChanged: " + state);
                }
            });
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.btn:
                    //强制切换到选定的item,第二个参数表示跳转是否显示动画,不传时默认为true
                    wheelPicker.setSelectedItemPosition(3, true);
                    //wheelPicker.setSelectedItemPosition(3);
                    break;
            }
        }
    }
    

3. 设置显示效果

常用的显示效果如下:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private static final String TAG = "MainActivity";
    
    WheelPicker wheelPicker;

    List<People> list = new ArrayList<>();

    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        wheelPicker = findViewById(R.id.wp);
        initData();
        initWP(); // 必用的方法
        initWPShow(); //改变各种显示状态的方法
        initWPText(); //Text相关的显示状态
    }

    private void initData() {
		//省略刚才出现过的代码
    }

    private void initWP() {
        //省略刚才出现过的代码
    }

    private void initWPShow() {
        // 设置数据是否循环显示
        wheelPicker.setCyclic(true);
        // 查看是否循环显示
        wheelPicker.isCyclic();

        //设置是否有指示器,设置后选中项的上下会用线框柱
        wheelPicker.setIndicator(true);
        wheelPicker.setIndicatorColor(0xFF123456); //16进制
        wheelPicker.setIndicatorSize(3); //单位是px

        // 设置是否有幕布,设置后选中项会被指定的颜色覆盖,默认false
        wheelPicker.setCurtain(false);
        wheelPicker.setCurtainColor(0xFF777777);

        // 设置是否有空气感,设置后上下边缘会渐变为透明,默认false
        wheelPicker.setAtmospheric(true);

        // 设置是否有卷曲感,不能微调卷曲幅度,默认false
        wheelPicker.setCurved(true);

        // 设置item的排列,左中右,默认中
        wheelPicker.setItemAlign(WheelPicker.ALIGN_CENTER);

    }

    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
    private void initWPText() {

        // 设置选中项的字色,16进制(0xFF+16进制的rgb)
        wheelPicker.setSelectedItemTextColor(0xFF000000);

        // 设置字体大小,字体颜色
        wheelPicker.setItemTextColor(0xFF888888);
        wheelPicker.setItemTextSize(30); // 单位px,需要自己做sp转px,也可以在xml中直接设置sp

        // 设置字体排列方式,同普通textView,一般两行以上的数据才有效果
        wheelPicker.setTextAlignment(TEXT_ALIGNMENT_TEXT_START);
    }


}

参考材料

https://github.com/AigeStudio/WheelPicker/wiki/%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A1%A3
帮助文档 · AigeStudio/WheelPicker Wiki · GitHub

还有WheelPicker的源码。

本文地址:https://blog.csdn.net/qq_41872247/article/details/107364456