【问题标题】:RecyclerView | Fastest smoothScrollToPosition animation回收站查看 |最快的 smoothScrollToPosition 动画
【发布时间】:2016-07-14 22:32:12
【问题描述】:

问题基于真实场景,我简化了用例:

假设我们有一个值从 0 到 999 的微调器和回收视图。 此外,除了常规的回收器滑动选项,用户还可以从微调器中选择一个数字,回收器将滚动到索引。

问题:当当前页面和新的微调器值之间的差异很大时(例如,我们在位置 0,现在用户选择来自微调器 400)。

下面是代码(item layout 只包含 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);你可以试试这个。
  • @Arpit Ratan,MPG,这对我没有帮助,因为我想要一个短滚动动画(实际上,我正在寻找类似 viewPager 动画)
  • recyclerView.scrollToPosition(i-5);然后 recyclerView.smoothScrollToPosition(i);但请记住根据您的使用验证此 i。

标签: android android-animation android-recyclerview


【解决方案1】:

recyclerView.scrollToPosition(i-5);然后 recyclerView.smoothScrollToPosition(i);但请记住根据您的用途验证此 "i"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多