CarouselLayoutManager的使用

該項目的地址
github地址

效果圖:(本人不會截動圖,截動圖的軟件誰有通知下)

效果圖

**adapter代碼:**這裏本人使用的是:
//全局通用adapter
implementation ‘com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.34’

package com.ytlz.testlistpage;

import android.support.annotation.Nullable;

import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;

import java.util.HashMap;
import java.util.List;

/**
 * Created by wyb on 2019-08-03.
 */

public class TestAdapter extends BaseQuickAdapter<HashMap<String, String>, BaseViewHolder> {


    public TestAdapter(@Nullable List<HashMap<String, String>> data) {
        super(R.layout.cardview_item, data);
    }


    @Override
    protected void convert(BaseViewHolder helper, HashMap<String, String> item) {
        helper.setText(R.id.item_name, item.get("name"));

    }
}

activity代碼:

package com.ytlz.testlistpage;

import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.Toast;

import com.azoft.carousellayoutmanager.CarouselLayoutManager;
import com.azoft.carousellayoutmanager.CarouselZoomPostLayoutListener;
import com.azoft.carousellayoutmanager.CenterScrollListener;
import com.azoft.carousellayoutmanager.DefaultChildSelectionListener;
import com.chad.library.adapter.base.BaseQuickAdapter;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class Main2Activity extends AppCompatActivity {
    private String[] names = {"德瑪西亞", "蓋倫", "今日講解", "今日說法", "宋朝那些事", "王者榮耀", "優酷牛人", "天下第一哦", "紅樓夢"};

    RecyclerView recyclerView;
    TestAdapter adapter;
    List<HashMap<String, String>> adapterList = new ArrayList<>();
    private int currentPosition = -1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.recycle_view);
        initViews();
    }


    void initViews() {
        for (int i = 0; i < 5; i++) {
            HashMap<String, String> map = new HashMap<>();
            map.put("name", names[i]);
            adapterList.add(map);
        }
        recyclerView = findViewById(R.id.recycle);
        adapter = new TestAdapter(adapterList);
        //使用方法和普通的LayoutManager一樣
        CarouselLayoutManager layoutManager = new CarouselLayoutManager(CarouselLayoutManager.HORIZONTAL);
        layoutManager.setPostLayoutListener(new CarouselZoomPostLayoutListener());
        //這個是設置除了中間最大的子view外,兩邊最多能顯示的子view的個數
        layoutManager.setMaxVisibleItems(2);
        //設置item的滑動監聽,返回當前滑動到的某一項(最大的那一項)
        layoutManager.addOnItemSelectionListener(new CarouselLayoutManager.OnCenterItemSelectionListener() {
            @Override
            public void onCenterItemChanged(int adapterPosition) {
                currentPosition = adapterPosition;
                Log.d("Main2Activity", "onCenterItemChanged: -----" + adapterPosition + adapterList.get(adapterPosition).get("name"));
            }
        });
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setHasFixedSize(true);
        recyclerView.setAdapter(adapter);
        recyclerView.addOnScrollListener(new CenterScrollListener());
        //設置這個主要是爲了好看,使數據默認居中(可以在第一次顯示數據時使用)
        recyclerView.scrollToPosition(adapterList.size() / 2);
        //設置item的點擊
        adapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
                if (position == currentPosition) {
                    Log.d("Main2Activity", "onItemClick: --------相同");

                } else {
                    Log.d("Main2Activity", "onItemClick: --------不是相同的不能操作" + position + "/n" + currentPosition);
                }
            }
        });

        /**
         * 1.設置滾動到中間項的點擊事件(可見的條目中,任意點擊該條目,把該條目的位置設置爲中間項)
         * 2.響應中間項的點擊事件
         * 3.會與setOnItemClickListener產生衝突,造成OnItemClickListener無法無法響應
         */
        DefaultChildSelectionListener.initCenterItemListener(new DefaultChildSelectionListener.OnCenterItemClickListener() {
            @Override
            public void onCenterItemClicked(@NonNull RecyclerView recyclerView, @NonNull CarouselLayoutManager carouselLayoutManager, @NonNull View v) {

                final int intposition = recyclerView.getChildLayoutPosition(v);
                Toast.makeText(Main2Activity.this, "我是中間項" + intposition + "\n" + names[intposition], Toast.LENGTH_SHORT).show();

            }
        }, recyclerView, layoutManager);
    }


}

代碼中的註釋已經寫得很清楚了,需要注意的是BaseQuickAdapter和DefaultChildSelectionListener會產生衝突,所有使用時要注意

R.layout.recycle_view代碼

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycle"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">
    </android.support.v7.widget.RecyclerView>

</android.support.constraint.ConstraintLayout>

子項的佈局代碼:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card_view"
    android:layout_width="300dp"
    android:layout_height="300dp"
    card_view:cardCornerRadius="8dp"
    card_view:cardElevation="5dp"
    card_view:cardPreventCornerOverlap="true">

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="300dp"
        android:background="@color/colorAccent1">

        <ImageView
            android:id="@+id/item_img"
            android:layout_width="300dp"
            android:layout_height="100dp"
            android:layout_centerHorizontal="true"
            android:background="@color/colorAccent"
            android:scaleType="centerCrop" />

        <LinearLayout
            android:layout_width="360dp"
            android:layout_height="190dp"
            android:layout_alignParentBottom="true"
            android:orientation="vertical">

            <TextView
                android:id="@+id/item_name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginTop="21dp"
                android:gravity="center"
                android:text="1111111111"
                android:textColor="#666666" />

            <TextView
                android:id="@+id/item_content"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginTop="17dp"
                android:gravity="center"
                android:text="1111111111"
                android:textColor="#b1b1b1" />

            <ImageView
                android:id="@+id/item_start"
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:layout_gravity="center_horizontal"
                android:src="@mipmap/ic_launcher" />
        </LinearLayout>
    </RelativeLayout>
</android.support.v7.widget.CardView>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章