Skip to content

Commit 93c3b3f

Browse files
committed
add LoopRecyclerViewPager demo
1 parent 3a72ab7 commit 93c3b3f

10 files changed

+151
-9
lines changed

app/src/main/AndroidManifest.xml

+3
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@
2525
<activity
2626
android:name=".VerticalPagerActivity" >
2727
</activity>
28+
<activity
29+
android:name=".LoopPagerActivity" >
30+
</activity>
2831
<activity
2932
android:name=".MaterialDemoActivity"
3033
android:theme="@style/Theme.DesignDemo">
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
package com.lsjwzh.widget.recyclerviewpagerdeomo;
2+
3+
import android.app.Activity;
4+
import android.os.Bundle;
5+
import android.support.v7.widget.LinearLayoutManager;
6+
import android.support.v7.widget.RecyclerView;
7+
import android.view.View;
8+
import android.widget.Button;
9+
import android.widget.EditText;
10+
11+
import com.lsjwzh.widget.recyclerviewpager.LoopRecyclerViewPager;
12+
13+
public class LoopPagerActivity extends Activity {
14+
protected LoopRecyclerViewPager mRecyclerViewPager;
15+
private EditText mTargetPosition;
16+
private Button mScrollToPosition;
17+
18+
@Override
19+
protected void onCreate(Bundle savedInstanceState) {
20+
super.onCreate(savedInstanceState);
21+
setContentView(R.layout.demo_loopviewpager);
22+
initViewPager();
23+
}
24+
25+
protected void initViewPager() {
26+
mRecyclerViewPager = (LoopRecyclerViewPager) findViewById(R.id.viewpager);
27+
mTargetPosition = (EditText) findViewById(R.id.target_position);
28+
mScrollToPosition = (Button) findViewById(R.id.scroll_to_target_position);
29+
mScrollToPosition.setOnClickListener(new View.OnClickListener() {
30+
@Override
31+
public void onClick(View v) {
32+
int position = mTargetPosition.getText() != null ? Integer.valueOf(mTargetPosition
33+
.getText()
34+
.toString()) : 0;
35+
mRecyclerViewPager.smoothScrollToPosition(position);
36+
}
37+
});
38+
39+
LinearLayoutManager layout = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL,
40+
false);
41+
mRecyclerViewPager.setTriggerOffset(0.15f);
42+
mRecyclerViewPager.setFlingFactor(0.25f);
43+
mRecyclerViewPager.setLayoutManager(layout);
44+
mRecyclerViewPager.setAdapter(new LayoutAdapter(this, mRecyclerViewPager));
45+
mRecyclerViewPager.setHasFixedSize(true);
46+
mRecyclerViewPager.setLongClickable(true);
47+
48+
mRecyclerViewPager.setOnScrollListener(new RecyclerView.OnScrollListener() {
49+
@Override
50+
public void onScrollStateChanged(RecyclerView recyclerView, int scrollState) {
51+
52+
}
53+
54+
@Override
55+
public void onScrolled(RecyclerView recyclerView, int i, int i2) {
56+
// mPositionText.setText("First: " + mRecyclerViewPager.getFirstVisiblePosition());
57+
int childCount = mRecyclerViewPager.getChildCount();
58+
int width = mRecyclerViewPager.getChildAt(0).getWidth();
59+
int padding = (mRecyclerViewPager.getWidth() - width) / 2;
60+
61+
for (int j = 0; j < childCount; j++) {
62+
View v = recyclerView.getChildAt(j);
63+
//往左 从 padding 到 -(v.getWidth()-padding) 的过程中,由大到小
64+
float rate = 0;
65+
if (v.getLeft() <= padding) {
66+
if (v.getLeft() >= padding - v.getWidth()) {
67+
rate = (padding - v.getLeft()) * 1f / v.getWidth();
68+
} else {
69+
rate = 1;
70+
}
71+
v.setScaleY(1 - rate * 0.1f);
72+
} else {
73+
//往右 从 padding 到 recyclerView.getWidth()-padding 的过程中,由大到小
74+
if (v.getLeft() <= recyclerView.getWidth() - padding) {
75+
rate = (recyclerView.getWidth() - padding - v.getLeft()) * 1f / v.getWidth();
76+
}
77+
v.setScaleY(0.9f + rate * 0.1f);
78+
}
79+
}
80+
}
81+
});
82+
83+
mRecyclerViewPager.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
84+
@Override
85+
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
86+
if (mRecyclerViewPager.getChildCount() < 3) {
87+
if (mRecyclerViewPager.getChildAt(1) != null) {
88+
View v1 = mRecyclerViewPager.getChildAt(1);
89+
v1.setScaleY(0.9f);
90+
}
91+
} else {
92+
if (mRecyclerViewPager.getChildAt(0) != null) {
93+
View v0 = mRecyclerViewPager.getChildAt(0);
94+
v0.setScaleY(0.9f);
95+
}
96+
if (mRecyclerViewPager.getChildAt(2) != null) {
97+
View v2 = mRecyclerViewPager.getChildAt(2);
98+
v2.setScaleY(0.9f);
99+
}
100+
}
101+
102+
}
103+
});
104+
}
105+
}

app/src/main/java/com/lsjwzh/widget/recyclerviewpagerdeomo/MainActivity.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,18 @@ void onClick() {
6262
startActivity(new Intent(MainActivity.this, MaterialDemoActivity.class));
6363
}
6464
});
65-
mDemoListAdapter.add(new DemoItem("Vertical ViewPager Demo(TODO)") {
65+
mDemoListAdapter.add(new DemoItem("Vertical ViewPager Demo") {
6666
@Override
6767
void onClick() {
6868
startActivity(new Intent(MainActivity.this, VerticalPagerActivity.class));
6969
}
7070
});
71+
mDemoListAdapter.add(new DemoItem("Loop ViewPager Demo") {
72+
@Override
73+
void onClick() {
74+
startActivity(new Intent(MainActivity.this, LoopPagerActivity.class));
75+
}
76+
});
7177
mDemoListAdapter.add(new DemoItem("3D effect Demo(TODO)") {
7278
@Override
7379
void onClick() {

app/src/main/java/com/lsjwzh/widget/recyclerviewpagerdeomo/SingleFlingPagerActivity.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public void onScrollStateChanged(RecyclerView recyclerView, int scrollState) {
3535

3636
@Override
3737
public void onScrolled(RecyclerView recyclerView, int i, int i2) {
38-
// mPositionText.setText("First: " + mRecyclerView.getFirstVisiblePosition());
38+
// mPositionText.setText("First: " + mRecyclerViewPager.getFirstVisiblePosition());
3939
int childCount = mRecyclerView.getChildCount();
4040
int width = mRecyclerView.getChildAt(0).getWidth();
4141
int padding = (mRecyclerView.getWidth() - width) / 2;

app/src/main/java/com/lsjwzh/widget/recyclerviewpagerdeomo/VerticalLayoutFragment.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public void onViewCreated(View view, Bundle savedInstanceState) {
5757
mToast = Toast.makeText(activity, "", Toast.LENGTH_SHORT);
5858
mToast.setGravity(Gravity.CENTER, 0, 0);
5959

60-
mRecyclerView = (RecyclerViewPager) view.findViewById(R.id.list);
60+
mRecyclerView = (RecyclerViewPager) view.findViewById(R.id.viewpager);
6161

6262
LinearLayoutManager layout = new LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false);
6363
mRecyclerView.setTriggerOffset(0.15f);
@@ -81,7 +81,7 @@ public void onScrollStateChanged(RecyclerView recyclerView, int scrollState) {
8181

8282
@Override
8383
public void onScrolled(RecyclerView recyclerView, int i, int i2) {
84-
// mPositionText.setText("First: " + mRecyclerView.getFirstVisiblePosition());
84+
// mPositionText.setText("First: " + mRecyclerViewPager.getFirstVisiblePosition());
8585
int childCount = mRecyclerView.getChildCount();
8686
int width = mRecyclerView.getChildAt(0).getWidth();
8787
int padding = (mRecyclerView.getWidth() - width) / 2;

app/src/main/java/com/lsjwzh/widget/recyclerviewpagerdeomo/VerticalPagerActivity.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ protected void onCreate(Bundle savedInstanceState) {
1919
}
2020

2121
protected void initViewPager() {
22-
mRecyclerView = (RecyclerViewPager) findViewById(R.id.list);
22+
mRecyclerView = (RecyclerViewPager) findViewById(R.id.viewpager);
2323

2424
LinearLayoutManager layout = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL,
2525
false);
@@ -38,7 +38,7 @@ public void onScrollStateChanged(RecyclerView recyclerView, int scrollState) {
3838

3939
@Override
4040
public void onScrolled(RecyclerView recyclerView, int i, int i2) {
41-
// mPositionText.setText("First: " + mRecyclerView.getFirstVisiblePosition());
41+
// mPositionText.setText("First: " + mRecyclerViewPager.getFirstVisiblePosition());
4242
int childCount = mRecyclerView.getChildCount();
4343
int width = mRecyclerView.getChildAt(0).getWidth();
4444
int padding = (mRecyclerView.getWidth() - width) / 2;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<LinearLayout
3+
xmlns:android="http://schemas.android.com/apk/res/android"
4+
android:layout_width="match_parent"
5+
android:layout_height="match_parent"
6+
android:orientation="vertical">
7+
<EditText
8+
android:id="@+id/target_position"
9+
android:hint="Target Position"
10+
android:inputType="number"
11+
android:layout_width="match_parent"
12+
android:layout_height="40dp"/>
13+
14+
<Button
15+
android:id="@+id/scroll_to_target_position"
16+
android:text="Scroll To Target Position"
17+
android:layout_width="match_parent"
18+
android:layout_height="50dp"/>
19+
20+
<com.lsjwzh.widget.recyclerviewpager.LoopRecyclerViewPager
21+
android:id="@+id/viewpager"
22+
android:layout_width="match_parent"
23+
android:layout_height="match_parent"
24+
android:layout_marginTop="20dp"
25+
android:clipToPadding="false"
26+
android:paddingTop="15dp"
27+
android:paddingBottom="15dp"/>
28+
</LinearLayout>

app/src/main/res/layout/demo_vertical_viewpager.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
android:layout_height="match_parent">
66

77
<com.lsjwzh.widget.recyclerviewpager.RecyclerViewPager
8-
android:id="@+id/list"
8+
android:id="@+id/viewpager"
99
android:layout_width="match_parent"
1010
android:layout_height="match_parent"
1111
android:layout_marginTop="20dp"

app/src/main/res/layout/layout_horizontal.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
android:layout_height="match_parent">
77
<com.lsjwzh.widget.recyclerviewpager.RecyclerViewPager
88
android:layout_marginTop="20dp"
9-
android:id="@+id/list"
9+
android:id="@+id/viewpager"
1010
android:layout_width="match_parent"
1111
android:layout_height="match_parent"
1212
android:paddingLeft="30dp"

app/src/main/res/layout/layout_viewpager.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
android:layout_height="match_parent">
66

77
<android.support.v4.view.ViewPager
8-
android:id="@+id/list"
8+
android:id="@+id/viewpager"
99
android:layout_width="match_parent"
1010
android:layout_height="match_parent"
1111
android:layout_marginTop="20dp"

0 commit comments

Comments
 (0)