1. 程式人生 > 其它 >RecyclerView 配合佈局的簡單使用-->懸浮titleBar

RecyclerView 配合佈局的簡單使用-->懸浮titleBar

程式碼

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>