RecyclerView 配合佈局的簡單使用-->懸浮titleBar
阿新 • • 發佈:2022-03-19
程式碼
public class MainActivity extends AppCompatActivity { private RecyclerView mRcyclerView; private FeedAdapter mFeedAdapter; //懸浮條佈局 private RelativeLayout mSuspensionBar; private TextView mSuspensionTv; private int mSuspensionHeight; private int mCurrentPosition; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mSuspensionBar = findViewById(R.id.suspension_bar); mSuspensionTv = findViewById(R.id.tv_nickname); mRcyclerView = findViewById(R.id.recyclerview); LinearLayoutManager layoutManager = new LinearLayoutManager(this); mRcyclerView.setLayoutManager(layoutManager); mFeedAdapter = new FeedAdapter(); mRcyclerView.setAdapter(mFeedAdapter); mRcyclerView.setHasFixedSize(true); mRcyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); //獲取懸浮條的高度 mSuspensionHeight = mSuspensionBar.getHeight(); } @Override public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); //監聽調整懸浮條位置 //找到下一個itemView View view = layoutManager.findViewByPosition(mCurrentPosition+1); if(view!=null){ if(view.getTop() <= mSuspensionHeight){ //需要對懸浮條進行移動 mSuspensionBar.setY(-(mSuspensionHeight-view.getTop())); }else { //保持在原來的位置 mSuspensionBar.setY(0); } if(mCurrentPosition != layoutManager.findFirstVisibleItemPosition()){ mCurrentPosition = layoutManager.findFirstVisibleItemPosition(); //初始化 updateSuspensionBar(); } } } }); updateSuspensionBar(); } private void updateSuspensionBar() { mSuspensionTv.setText("tww"); } private int [] mInts = {R.drawable.a,R.drawable.b,R.drawable.bb6a0410ef,R.drawable.ic_launcher_foreground,R.drawable.b}; public class FeedAdapter extends RecyclerView.Adapter<FeedAdapter.FeedHolder>{ @NonNull @Override public FeedHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_feed,parent,false); return new FeedHolder(view); } @Override public void onBindViewHolder(@NonNull FeedHolder holder, int position) { holder.mTvNickname.setText( "tww"+position); holder.mIvContent.setImageResource(mInts[position]); } @Override public int getItemCount() { return mInts.length; } public class FeedHolder extends RecyclerView.ViewHolder{ ImageView mIvContent; TextView mTvNickname; public FeedHolder(@NonNull View itemView) { super(itemView); mIvContent = itemView.findViewById(R.id.iv_content); mTvNickname = itemView.findViewById(R.id.tv_nickname); } } } }
佈局
//activity_main.xml <?xml version="1.0" encoding="utf-8"?> <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <com.google.android.material.appbar.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <androidx.appcompat.widget.Toolbar android:id="@+id/girls" android:layout_width="match_parent" android:layout_height="?actionBarSize" app:layout_scrollFlags="scroll|enterAlways" app:title="toolbar"/> </com.google.android.material.appbar.AppBarLayout> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" > <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerview" android:background="@color/white" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical" tools:listitem="@layout/item_feed" /> <RelativeLayout android:background="@color/white" android:id="@+id/suspension_bar" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/tv_nickname" android:layout_width="wrap_content" android:layout_height="44dp" android:layout_marginLeft="8dp" android:text="NetEase" android:textColor="@color/purple_500" android:gravity="center_vertical" android:textSize="12sp" /> <View android:id="@+id/top_divider" android:layout_width="match_parent" android:layout_height="0.2dp" android:layout_below="@id/tv_nickname" android:background="#33000000" /> </RelativeLayout> </FrameLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout>
//item_feed.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/tv_nickname" android:layout_width="wrap_content" android:layout_height="44dp" android:layout_marginLeft="8dp" android:text="NetEase" android:textColor="@color/purple_500" android:gravity="center_vertical" android:textSize="12sp" /> <View android:id="@+id/top_divider" android:layout_width="match_parent" android:layout_height="0.2dp" android:layout_below="@id/tv_nickname" android:background="#33000000" /> <ImageView android:id="@+id/iv_content" android:layout_width="match_parent" android:layout_height="350dp" android:layout_below="@id/top_divider" android:scaleType="centerCrop" android:src="@drawable/b" /> </RelativeLayout>