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

文章目录

  • 1. 添加依赖
  • 2. 基本用法
  • 3. 设置显示效果
  • 参考材料

1. 添加依赖

在Project的build.gradle中,添加maven { url 'https:jitpack.io'}
Android开源项目滚轮选择器WheelPicker的基本用法总结_第1张图片
在相关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张图片

2. 基本用法

  1. 在xml文件中设置WheelPicker。

    
    <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的源码。

你可能感兴趣的:(实际问题,Android)