該項目的地址
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>