在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排第一的简书那篇)我个人怀疑有高度借鉴的行为。
在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>
设置一个实体类,模拟实际开发场景。
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 + '\'' +
'}';
}
}
然后在相关的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;
}
}
}
常用的显示效果如下:
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
如对本文有疑问, 点击进行留言回复!!
[杭电多校2020]第一场 1004 Distinct Sub-palindromes
Swift -- 将本地生成的UIImage进行持久化保存(存到文件中fileManager.createFile)
网友评论