版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}
}