Skip to content

Commit 0b3fa9e

Browse files
author
csnowstack
committed
recyclervire 滑到顶部的时候下滑 tab才会向下移动
1 parent e6eb666 commit 0b3fa9e

23 files changed

+158
-64
lines changed

.idea/misc.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/vcs.xml

Lines changed: 0 additions & 6 deletions
This file was deleted.

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@
2222
> 一些细节没有实现 ,见谅,录制的gif效果也不太好 :-(
2323
2424

25+
### TODO
26+
- 快速滑动会产生问题.....
27+
2528
### 实现
2629

2730
#### 依赖关系
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package cq.behaviordemo;
2+
3+
/**
4+
* Created by cqll on 2016/12/15.
5+
* 判断子view是否需要滑动
6+
*/
7+
8+
public interface IsChildRequestScrollListener {
9+
boolean requestScroll();
10+
}

app/src/main/java/cq/behaviordemo/ItemFragment.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@
99
import android.view.View;
1010
import android.view.ViewGroup;
1111

12+
import cq.behaviordemo.adapter.FriendInfoAdapter;
13+
1214
/**
1315
* Created by cqll on 2016/9/30.
1416
*/
1517

16-
public class ItemFragment extends Fragment {
18+
public class ItemFragment extends Fragment implements IsChildRequestScrollListener{
1719

1820
private RecyclerView mRecyclerView;
1921

@@ -40,4 +42,11 @@ private void initView() {
4042
}
4143

4244

45+
@Override
46+
public boolean requestScroll() {
47+
//不是在顶部
48+
return !(mRecyclerView.getAdapter()!=null&&
49+
mRecyclerView.getAdapter().getItemCount()>0&&
50+
((LinearLayoutManager)mRecyclerView.getLayoutManager()).findFirstCompletelyVisibleItemPosition()==0);
51+
}
4352
}

app/src/main/java/cq/behaviordemo/MainActivity.java

Lines changed: 4 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@
22

33
import android.os.Bundle;
44
import android.support.design.widget.TabLayout;
5-
import android.support.v4.app.Fragment;
6-
import android.support.v4.app.FragmentManager;
7-
import android.support.v4.app.FragmentStatePagerAdapter;
85
import android.support.v4.view.ViewPager;
96
import android.support.v7.app.AppCompatActivity;
107

8+
import cq.behaviordemo.adapter.ItemAdapter;
9+
1110
public class MainActivity extends AppCompatActivity {
1211
private TabLayout mTabLayout;
1312
private ViewPager mViewPager;
@@ -28,7 +27,7 @@ private void findView() {
2827

2928
private void initView() {
3029

31-
mViewPager.setAdapter(new ItemAdapter(getSupportFragmentManager()));
30+
mViewPager.setAdapter(new ItemAdapter(getSupportFragmentManager(),mViewPager));
3231
mTabLayout.setupWithViewPager(mViewPager);
3332
}
3433

@@ -49,32 +48,11 @@ public void onTabReselected(TabLayout.Tab tab) {
4948

5049
}
5150
});
52-
}
53-
54-
5551

56-
static class ItemAdapter extends FragmentStatePagerAdapter{
57-
private String [] titles={"MEDIA","ABOUT","REVIEWS"};
58-
59-
public ItemAdapter(FragmentManager fm) {
60-
super(fm);
61-
}
52+
}
6253

63-
@Override
64-
public Fragment getItem(int position) {
65-
return ItemFragment.newInstance();
66-
}
6754

68-
@Override
69-
public int getCount() {
70-
return titles.length;
71-
}
7255

73-
@Override
74-
public CharSequence getPageTitle(int position) {
75-
return titles[position];
76-
}
77-
}
7856

7957

8058
}

app/src/main/java/cq/behaviordemo/FriendInfoAdapter.java renamed to app/src/main/java/cq/behaviordemo/adapter/FriendInfoAdapter.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
package cq.behaviordemo;
1+
package cq.behaviordemo.adapter;
22

33
import android.support.v7.widget.RecyclerView;
44
import android.view.LayoutInflater;
55
import android.view.View;
66
import android.view.ViewGroup;
77
import android.widget.TextView;
88

9+
import cq.behaviordemo.R;
10+
911
/**
1012
* Created by cqll on 2016/9/30.
1113
*/
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package cq.behaviordemo.adapter;
2+
3+
import android.support.v4.app.Fragment;
4+
import android.support.v4.app.FragmentManager;
5+
import android.support.v4.app.FragmentStatePagerAdapter;
6+
import android.support.v4.view.ViewPager;
7+
8+
import java.lang.ref.WeakReference;
9+
import java.util.ArrayList;
10+
import java.util.List;
11+
12+
import cq.behaviordemo.IsChildRequestScrollListener;
13+
import cq.behaviordemo.ItemFragment;
14+
15+
/**
16+
* Created by cqll on 2016/12/15.
17+
*/
18+
19+
public class ItemAdapter extends FragmentStatePagerAdapter implements IsChildRequestScrollListener{
20+
private String [] titles={"MEDIA","ABOUT","REVIEWS"};
21+
private WeakReference<ViewPager> mViewPager;//也许有点用
22+
private List<ItemFragment> mFragments;
23+
public ItemAdapter(FragmentManager fm) {
24+
this(fm,null);
25+
}
26+
27+
public ItemAdapter(FragmentManager fm, ViewPager viewPager) {
28+
super(fm);
29+
mViewPager = new WeakReference<ViewPager>(viewPager);
30+
mFragments=new ArrayList<ItemFragment>();
31+
mFragments.add(ItemFragment.newInstance());
32+
mFragments.add(ItemFragment.newInstance());
33+
mFragments.add(ItemFragment.newInstance());
34+
}
35+
36+
@Override
37+
public Fragment getItem(int position) {
38+
return mFragments.get(position);
39+
}
40+
41+
@Override
42+
public int getCount() {
43+
return titles.length;
44+
}
45+
46+
@Override
47+
public CharSequence getPageTitle(int position) {
48+
return titles[position];
49+
}
50+
51+
52+
@Override
53+
public boolean requestScroll() {
54+
//有子项目,有设置 vp ,没被清掉
55+
if(mViewPager!=null&&mViewPager.get()!=null ){
56+
int currentItem=mViewPager.get().getCurrentItem();
57+
//实现了接口
58+
if(getItem(currentItem) instanceof IsChildRequestScrollListener)
59+
return ((IsChildRequestScrollListener)getItem(currentItem)).requestScroll();
60+
}
61+
62+
return false;
63+
}
64+
}

app/src/main/java/cq/behaviordemo/BGBehavior.java renamed to app/src/main/java/cq/behaviordemo/behavior/BGBehavior.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package cq.behaviordemo;
1+
package cq.behaviordemo.behavior;
22

33
import android.content.Context;
44
import android.support.design.widget.CoordinatorLayout;
@@ -7,6 +7,9 @@
77
import android.util.DisplayMetrics;
88
import android.view.View;
99

10+
import cq.behaviordemo.Constants;
11+
import cq.behaviordemo.R;
12+
1013
/**
1114
* Created by cqll on 2016/12/12.
1215
*/
@@ -24,7 +27,7 @@ public BGBehavior(Context context, AttributeSet attrs) {
2427
DisplayMetrics metrics=context.getResources().getDisplayMetrics();
2528
mWidth=metrics.widthPixels;
2629

27-
mStartTop=(int) (mHeightToolbar+mIconSizeStart/2+mWidth*Constants.FRACTION_WIDTH_BGCONTENT*Constants.FRACTION_HEIGHT_BGCONTENT/2f);
30+
mStartTop=(int) (mHeightToolbar+mIconSizeStart/2+mWidth* Constants.FRACTION_WIDTH_BGCONTENT*Constants.FRACTION_HEIGHT_BGCONTENT/2f);
2831
}
2932

3033

app/src/main/java/cq/behaviordemo/BGContentBehavior.java renamed to app/src/main/java/cq/behaviordemo/behavior/BGContentBehavior.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package cq.behaviordemo;
1+
package cq.behaviordemo.behavior;
22

33
import android.content.Context;
44
import android.support.design.widget.CoordinatorLayout;
@@ -7,6 +7,9 @@
77
import android.util.DisplayMetrics;
88
import android.view.View;
99

10+
import cq.behaviordemo.Constants;
11+
import cq.behaviordemo.R;
12+
1013
/**
1114
* Created by cqll on 2016/12/12.
1215
*/
@@ -25,7 +28,7 @@ public BGContentBehavior(Context context, AttributeSet attrs) {
2528

2629
DisplayMetrics metrics=context.getResources().getDisplayMetrics();
2730
mWidth=metrics.widthPixels;
28-
mBgWidthStart= (int) (mWidth*Constants.FRACTION_WIDTH_BGCONTENT);
31+
mBgWidthStart= (int) (mWidth* Constants.FRACTION_WIDTH_BGCONTENT);
2932
mBgHeightStart= (int) (mBgWidthStart*Constants.FRACTION_HEIGHT_BGCONTENT);
3033

3134
}

0 commit comments

Comments
 (0)