Android实现一个选择器-recycleview滚动中第一个item位置的获取
16lz
2021-12-22
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 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; }}
更多相关文章
- Android(安卓)坐标
- Android自定义对话框(Dialog)位置,大小
- [Android算法] 实现获取视频的缩略图(ThumbnailUtils),并且播放
- Android剪切板
- Android(安卓)微博布局风格
- android软键盘的显示与隐藏
- Android基站+联网+google数据库定位
- Android(安卓)启动activity并且获取他的返回值
- android中的webview进度条