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

来源:互联网 发布:ubuntu 修改系统语言 编辑:程序博客网 时间:2024/04/18 10:42

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;    }}


阅读全文
3 0
原创粉丝点击