Android实现一个选择器-recycleview滚动中第一个item位置的获取

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shb2058/article/details/73189072

package com.example.administrator.testanima.ActivityTwo;

import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;

import com.example.administrator.testanima.R;

import java.util.ArrayList;
import java.util.List;
import java.util.zip.DeflaterOutputStream;

/**
 * Created by Administrator on 2017/6/13.
 */

public class ActivityTwo extends AppCompatActivity {
    List<MyBean> list;
    int widthScreen;
    int useWidth;
    Handler handler;
    RecyclerView recyclerView;
    MRecycleViewAdapter mRecycleViewAdapter;

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

    }

    private void initRecycleView() {
        recyclerView = (RecyclerView) findViewById(R.id.recycleview);
        list = new ArrayList();
        for (int i = 0; i < 100; i++) {
            MyBean myBean = new MyBean();
            myBean.setCheck(false);
            myBean.setNumber(i + "");
            list.add(myBean);
        }
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);//设置水平
        mRecycleViewAdapter = new MRecycleViewAdapter(list, ActivityTwo.this);
        recyclerView.setLayoutManager(linearLayoutManager);
        recyclerView.setAdapter(mRecycleViewAdapter);
        setRecycleView();

    }

    private void setRecycleView() {
        recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);


            }

            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                double itemWidth = 0.2 * widthScreen;
                //这个位置表示目前在屏幕显示的第一个item的位置
                int centerPosition = getPosition() + (int) (useWidth / itemWidth);
                Log.e("中间的位置", centerPosition + "=");
                for (int i = 0; i < list.size(); i++) {
                    if (i != centerPosition) {
                        list.get(i).setCheck(false);
                    } else {
                        list.get(i).setCheck(true);
                    }
                }
                mRecycleViewAdapter.notifyDataSetChanged();
            }
        });
    }

    @Override
    protected void onResume() {
        super.onResume();
        //获取view的中心坐标
        getPoint();
    }

    private void getPoint() {
        /*由于考虑到view可能还没绘制,所以来一个延时的线程获取view的位置*/
        WindowManager wm = (WindowManager)
                getSystemService(Context.WINDOW_SERVICE);
        widthScreen = wm.getDefaultDisplay().getWidth();
        final View view = findViewById(R.id.top);
        ViewGroup.LayoutParams v = view.getLayoutParams();
        v.width = (int) (widthScreen * 0.2);
        v.height = (int) (widthScreen * 0.2);
        handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
            }
        };
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                int X = view.getLeft();
                int Y = view.getTop();
                int width = view.getWidth();
                Log.e("四个参数", X + "=" + Y + "=" + width + "=" + widthScreen);
                useWidth = X + width / 2;
            }
        }, 1000);

    }

    /*获取recycleview中当前显示的第一个item的position*/
    private int getPosition() {
        LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
        int position = layoutManager.findFirstVisibleItemPosition();
        return position;
    }
}


猜你喜欢

转载自blog.csdn.net/shb2058/article/details/73189072