0

質問は実際のシナリオに基づいています。私はユースケースを簡略化します: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); 
     } 
    } 
} 

質問:ページの多くをスワイプする必要があるとき、私は「高速スクロール」のように実行することができますどのように?

編集:私はアニメーションを短くしたいです。

+0

scrollToメソッドを呼び出そうとしましたか?アニメーションなしでスワイプして希望の位置に移動します。 –

+0

recyclerView.scrollToPosition(i);これを試すことができます。 – MPG

+0

@Arpit Ratan、MPG、私は短いスクロールアニメーション(実際には、私はviewPagerアニメーションのように探しています)をしたいので、私を助けません。 – AsfK

答えて

4

recyclerView.scrollToPosition(i-5);その後、recyclerView.smoothScrollToPosition(i);を呼び出します。この"i"をあなたの用途に応じて検証してください。

関連する問題