【问题标题】:How to calculate which view occupies more than half of the screen如何计算哪个视图占据了屏幕的一半以上
【发布时间】:2018-10-17 17:26:03
【问题描述】:

我有一个recyclerview,其中包含我自己的 3 个自定义视图。 RV 可水平滚动,每个视图的宽度等于屏幕的宽度。我想显示,当前正在显示哪个视图(哪个视图占据了屏幕的一半以上)。该怎么做?

MainScreenActivity.class

public class MainScreenActivity extends BaseActivity implements View.OnClickListener, MainScreenView {
    private RecyclerView mRecyclerView;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mRecyclerView = findViewById(R.id.recycler_view);
        mLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
        mRecyclerView.setLayoutManager(mLayoutManager);
        mRecyclerView.setAdapter(mAdapter);
    }
}

MyAdapter.class

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
    private List<ChartDefiner> chartDefiners;
    private DataView dataView;

    public static class MyViewHolder extends RecyclerView.ViewHolder {
        ChartView chartView;

        public MyViewHolder(ChartView chartView) {
            super(chartView);
            this.chartView = chartView;
        }
    }

    public MyAdapter(List<ChartDefiner> chartDefiners, DataView dataView) {
        this.chartDefiners = chartDefiners;
        this.dataView = dataView;
    }

    @Override
    public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        ChartView v = (ChartView) LayoutInflater.from(parent.getContext()).inflate(R.layout.chart_layout, parent, false);
        return new MyViewHolder(v);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        holder.chartView.initData();
    }


    @Override
    public int getItemCount() {
        return chartDefiners.size();
    }

【问题讨论】:

    标签: android android-view android-recyclerview


    【解决方案1】:

    我在我的应用中实现了一些基本的滚动动画。我使用了这段代码,它工作得很好。

    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, 
    LinearLayoutManager.HORIZONTAL, false);
    recyclerView.setLayoutManager(linearLayoutManager);
    
    
    
    
     recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
            switch (newState) {
    
                case RecyclerView.SCROLL_STATE_SETTLING:
                   currentItemPosition=linearLayoutManager.findFirstCompletelyVisibleItemPosition();
     }
        }
    

    【讨论】:

    • 他想要显示的不仅仅是recycler view的项目,在滚动的时候如果你计算findFirstCompletelyVisibleItemPosition(),它会给出你想要的位置
    • 在我的情况下不起作用。在我的测试应用程序中,我在一个 rv 中有 3 个视图,并且 SCROLL_STATE_SETTLING 仅在我限定所有 3 个视图的边界时才切换
    • 在 RecyclerView.SCROLL_STATE_IDLE、RecyclerView.SCROLL_STATE_DRAGGING 的这些状态下尝试相同的操作:
    猜你喜欢
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    • 1970-01-01
    相关资源
    最近更新 更多