当我尝试使用RecyclerView像基本的三星Clock App计时器中那样制作时间选择器时,我遇到了问题,我已经完成了所有工作,并且想要将每个元素都捕捉到屏幕中央,但是当我尝试将SnapHelper添加到我的RecyclerViews中是行不通的。这是我的MainActivity。我添加了所有RecyclerViews以前的适配器。
public class MainActivity extends AppCompatActivity {
RecyclerView hours;
RecyclerView minutes;
RecyclerView seconds;
RecyclerAdapter recyclerAdapter;
RecyclerAdapter recyclerAdapter2;
RecyclerAdapter recyclerAdapter3;
List<HourStr> hoursList = new ArrayList<>();
List<HourStr> minutesList = new ArrayList<>();
List<HourStr> secondsList = new ArrayList<>();
SnapHelper snapHelper = new LinearSnapHelper();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
hours = findViewById(R.id.recycler_1);
minutes = findViewById(R.id.recycler_2);
seconds = findViewById(R.id.recycler_3);
hoursList = generateHour();
minutesList = generateMinSec();
secondsList = generateMinSec();
recyclerAdapter = new RecyclerAdapter(hoursList);
recyclerAdapter2 = new RecyclerAdapter(minutesList);
recyclerAdapter3 = new RecyclerAdapter(secondsList);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
LinearLayoutManager linearLayoutManager2 = new LinearLayoutManager(this);
LinearLayoutManager linearLayoutManager3 = new LinearLayoutManager(this);
hours.setAdapter(recyclerAdapter);
hours.setLayoutManager(linearLayoutManager);
hours.getLayoutManager().scrollToPosition(Integer.MAX_VALUE / 2 - 24);
minutes.setAdapter(recyclerAdapter2);
minutes.setLayoutManager(linearLayoutManager2);
minutes.getLayoutManager().scrollToPosition(Integer.MAX_VALUE / 2 - 4);
seconds.setAdapter(recyclerAdapter3);
seconds.setLayoutManager(linearLayoutManager3);
seconds.getLayoutManager().scrollToPosition(Integer.MAX_VALUE / 2 - 4);
snapHelper.attachToRecyclerView(hours);
snapHelper.attachToRecyclerView(minutes);
snapHelper.attachToRecyclerView(seconds);
}
private List<HourStr> generateHour() {
List<HourStr> messages = new ArrayList<>();
messages.add(new HourStr("00"));
messages.add(new HourStr("01"));
messages.add(new HourStr("02"));
messages.add(new HourStr("03")); //to ("99")
return messages;
}
private List<HourStr> generateMinSec() {
List<HourStr> messages = new ArrayList<>();
messages.add(new HourStr("00"));
messages.add(new HourStr("01"));
messages.add(new HourStr("02"));
messages.add(new HourStr("03")); //to ("59")
return messages;
}
}
在GitHub上找到项目: SnappedRecycler