import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.squareup.picasso.Picasso;
public class MainActivity extends AppCompatActivity {
private RecyclerView mFeedList;
private RelativeLayout mSuspensionBar;
private TextView mSuspensionTv;
private ImageView mSuspensionIv;
private int mCurrentPosition = 0;
private int mSuspensionHeight;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//顶部布局
mSuspensionBar = (RelativeLayout) findViewById(R.id.suspension_bar);
mSuspensionTv = (TextView) findViewById(R.id.tv_nickname);
mSuspensionIv = (ImageView) findViewById(R.id.iv_avatar);
final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
final FeedAdapter adapter = new FeedAdapter();
mFeedList = (RecyclerView) findViewById(R.id.feed_list);
mFeedList.setLayoutManager(linearLayoutManager);
mFeedList.setAdapter(adapter);
mFeedList.setHasFixedSize(true);
mFeedList.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
//每次滚动状态改变的时候都获取顶部布局的高度
mSuspensionHeight = mSuspensionBar.getHeight();
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
//获取指定位置的item的view
View view = linearLayoutManager.findViewByPosition(mCurrentPosition + 1);
if (view == null) return;
if (view.getTop() <= mSuspensionHeight) {
/**
* 判断出顶部的顶部布局与上边距的距离,如果<=顶部布局的距离
* 那么就让把顶部布局的Y轴距离向上偏移,已达到向上滚动的效果
*/
mSuspensionBar.setY(-(mSuspensionHeight - view.getTop()));
} else {
/**
* 直接让顶部布局到顶部
*/
mSuspensionBar.setY(0);
}
/**
* 获取最上面完全可见的item位置,判断是否是第0位
* 如果不是第0位,则让顶部布局置顶
*/
if (mCurrentPosition != linearLayoutManager.findFirstVisibleItemPosition()) {
mCurrentPosition = linearLayoutManager.findFirstVisibleItemPosition();
mSuspensionBar.setY(0);
//让顶部布局显示哪个图片
updateSuspensionBar();
}
}
});
}
private void updateSuspensionBar() {
Picasso.with(MainActivity.this)
//显示哪个图片
.load(getAvatarResId(mCurrentPosition))
.centerInside()
.fit()
.into(mSuspensionIv);
mSuspensionTv.setText("Taeyeon " + mCurrentPosition);
}
private int getAvatarResId(int position) {
switch (position % 4) {
case 0:
return R.drawable.avatar1;
case 1:
return R.drawable.avatar2;
case 2:
return R.drawable.avatar3;
case 3:
return R.drawable.avatar4;
}
return 0;
}
}
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.squareup.picasso.Picasso;
public class MainActivity extends AppCompatActivity {
private RecyclerView mFeedList;
private RelativeLayout mSuspensionBar;
private TextView mSuspensionTv;
private ImageView mSuspensionIv;
private int mCurrentPosition = 0;
private int mSuspensionHeight;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//顶部布局
mSuspensionBar = (RelativeLayout) findViewById(R.id.suspension_bar);
mSuspensionTv = (TextView) findViewById(R.id.tv_nickname);
mSuspensionIv = (ImageView) findViewById(R.id.iv_avatar);
final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
final FeedAdapter adapter = new FeedAdapter();
mFeedList = (RecyclerView) findViewById(R.id.feed_list);
mFeedList.setLayoutManager(linearLayoutManager);
mFeedList.setAdapter(adapter);
mFeedList.setHasFixedSize(true);
mFeedList.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
//每次滚动状态改变的时候都获取顶部布局的高度
mSuspensionHeight = mSuspensionBar.getHeight();
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
//获取指定位置的item的view
View view = linearLayoutManager.findViewByPosition(mCurrentPosition + 1);
if (view == null) return;
if (view.getTop() <= mSuspensionHeight) {
/**
* 判断出顶部的顶部布局与上边距的距离,如果<=顶部布局的距离
* 那么就让把顶部布局的Y轴距离向上偏移,已达到向上滚动的效果
*/
mSuspensionBar.setY(-(mSuspensionHeight - view.getTop()));
} else {
/**
* 直接让顶部布局到顶部
*/
mSuspensionBar.setY(0);
}
/**
* 获取最上面完全可见的item位置,判断是否是第0位
* 如果不是第0位,则让顶部布局置顶
*/
if (mCurrentPosition != linearLayoutManager.findFirstVisibleItemPosition()) {
mCurrentPosition = linearLayoutManager.findFirstVisibleItemPosition();
mSuspensionBar.setY(0);
//让顶部布局显示哪个图片
updateSuspensionBar();
}
}
});
}
private void updateSuspensionBar() {
Picasso.with(MainActivity.this)
//显示哪个图片
.load(getAvatarResId(mCurrentPosition))
.centerInside()
.fit()
.into(mSuspensionIv);
mSuspensionTv.setText("Taeyeon " + mCurrentPosition);
}
private int getAvatarResId(int position) {
switch (position % 4) {
case 0:
return R.drawable.avatar1;
case 1:
return R.drawable.avatar2;
case 2:
return R.drawable.avatar3;
case 3:
return R.drawable.avatar4;
}
return 0;
}
}
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.squareup.picasso.Picasso;
public class MainActivity extends AppCompatActivity {
private RecyclerView mFeedList;
private RelativeLayout mSuspensionBar;
private TextView mSuspensionTv;
private ImageView mSuspensionIv;
private int mCurrentPosition = 0;
private int mSuspensionHeight;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//顶部布局
mSuspensionBar = (RelativeLayout) findViewById(R.id.suspension_bar);
mSuspensionTv = (TextView) findViewById(R.id.tv_nickname);
mSuspensionIv = (ImageView) findViewById(R.id.iv_avatar);
final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
final FeedAdapter adapter = new FeedAdapter();
mFeedList = (RecyclerView) findViewById(R.id.feed_list);
mFeedList.setLayoutManager(linearLayoutManager);
mFeedList.setAdapter(adapter);
mFeedList.setHasFixedSize(true);
mFeedList.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
//每次滚动状态改变的时候都获取顶部布局的高度
mSuspensionHeight = mSuspensionBar.getHeight();
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
//获取指定位置的item的view
View view = linearLayoutManager.findViewByPosition(mCurrentPosition + 1);
if (view == null) return;
if (view.getTop() <= mSuspensionHeight) {
/**
* 判断出顶部的顶部布局与上边距的距离,如果<=顶部布局的距离
* 那么就让把顶部布局的Y轴距离向上偏移,已达到向上滚动的效果
*/
mSuspensionBar.setY(-(mSuspensionHeight - view.getTop()));
} else {
/**
* 直接让顶部布局到顶部
*/
mSuspensionBar.setY(0);
}
/**
* 获取最上面完全可见的item位置,判断是否是第0位
* 如果不是第0位,则让顶部布局置顶
*/
if (mCurrentPosition != linearLayoutManager.findFirstVisibleItemPosition()) {
mCurrentPosition = linearLayoutManager.findFirstVisibleItemPosition();
mSuspensionBar.setY(0);
//让顶部布局显示哪个图片
updateSuspensionBar();
}
}
});
}
private void updateSuspensionBar() {
Picasso.with(MainActivity.this)
//显示哪个图片
.load(getAvatarResId(mCurrentPosition))
.centerInside()
.fit()
.into(mSuspensionIv);
mSuspensionTv.setText("Taeyeon " + mCurrentPosition);
}
private int getAvatarResId(int position) {
switch (position % 4) {
case 0:
return R.drawable.avatar1;
case 1:
return R.drawable.avatar2;
case 2:
return R.drawable.avatar3;
case 3:
return R.drawable.avatar4;
}
return 0;
}
}