質問は実際のシナリオに基づいています。私はユースケースを簡略化します:RecyclerView |最も速いsmoothScrollToPositionアニメーション
0から999までの値を持ち、リサイクルビューのスピナーを持っているとしましょう。 さらに、定期的なリサイクル・スワイプ・オプションでは、ユーザーはスピナーから番号を選択することができ、リサイクラーは索引までロールします。
問題:現在のページと新しいスピナー値の間の差分が大きい場合は、ビューをスクロールするのに多くの時間がかかります(たとえば、位置0になっているので、ユーザーはスピナー400から選択します)。 )。以下は
コード(アイテムのレイアウトのみのTextViewを含ん)である:
public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
Spinner spinner;
List<Integer> items = new ArrayList<>();
ItemAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// init "database"
for (int i = 0; i < 1000; i++)
items.add(i);
// Spinner
spinner = (Spinner) findViewById(R.id.spinner);
final ArrayAdapter<Integer> spinnerAdapter = new ArrayAdapter<Integer>(this, R.layout.support_simple_spinner_dropdown_item, items);
spinner.setAdapter(spinnerAdapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
recyclerView.smoothScrollToPosition(i);
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
// Recycle View
recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
adapter = new ItemAdapter();
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setAdapter(adapter);
}
public class ItemAdapter extends RecyclerView.Adapter<ViewHolder>
{
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item, parent, false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.tvIndex.setText(String.valueOf(position));
}
@Override
public int getItemCount() {
return items.size();
}
}
private class ViewHolder extends RecyclerView.ViewHolder {
TextView tvIndex;
public ViewHolder(View itemView) {
super(itemView);
tvIndex = (TextView) itemView.findViewById(R.id.tv_index);
}
}
}
質問:ページの多くをスワイプする必要があるとき、私は「高速スクロール」のように実行することができますどのように?
編集:私はアニメーションを短くしたいです。
scrollToメソッドを呼び出そうとしましたか?アニメーションなしでスワイプして希望の位置に移動します。 –
recyclerView.scrollToPosition(i);これを試すことができます。 – MPG
@Arpit Ratan、MPG、私は短いスクロールアニメーション(実際には、私はviewPagerアニメーションのように探しています)をしたいので、私を助けません。 – AsfK