Skip to content

Commit 67b2e93

Browse files
author
chenyw
committed
feat:滑动3测试
1 parent 2d19dad commit 67b2e93

17 files changed

+789
-42
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@
105105
<activity android:name=".qrcode.QrCodeActivity"/>
106106
<activity android:name=".scrolltest.ScrollTestActivity"/>
107107
<activity android:name=".scrolltest.test2.ScrollTest2Activity"/>
108+
<activity android:name=".scrolltest.scroll3.ScrollTest3Activity"/>
108109
</application>
109110

110111

app/src/main/java/com/hugh/basis/MainActivity.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import com.hugh.basis.retrofit.RetrofitActivity;
4646
import com.hugh.basis.rvlooper.LooperActivity;
4747
import com.hugh.basis.scrolltest.ScrollTestActivity;
48+
import com.hugh.basis.scrolltest.scroll3.ScrollTest3Activity;
4849
import com.hugh.basis.scrolltest.test2.ScrollTest2Activity;
4950
import com.hugh.basis.services.TestOneService;
5051
import com.hugh.basis.third.greendao.NoteActivity;
@@ -567,7 +568,8 @@ public void onClick(View v) {
567568
findViewById(R.id.btn_goto_scroll).setOnClickListener(new View.OnClickListener() {
568569
@Override
569570
public void onClick(View v) {
570-
startActivity(new Intent(MainActivity.this, ScrollTestActivity.class));
571+
// startActivity(new Intent(MainActivity.this, ScrollTestActivity.class));
572+
startActivity(new Intent(MainActivity.this, ScrollTest3Activity.class));
571573
}
572574
});
573575

app/src/main/java/com/hugh/basis/scrolltest/ScrollTestActivity.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package com.hugh.basis.scrolltest;
22

33
import android.app.Activity;
4+
import android.graphics.Rect;
45
import android.os.Bundle;
6+
import android.util.Log;
7+
import android.view.ViewGroup;
58
import android.widget.LinearLayout;
69
import android.widget.TextView;
710

@@ -17,6 +20,7 @@
1720
import java.util.Map;
1821

1922
import androidx.annotation.Nullable;
23+
import androidx.core.widget.NestedScrollView;
2024
import androidx.recyclerview.widget.LinearLayoutManager;
2125
import androidx.recyclerview.widget.RecyclerView;
2226

@@ -26,8 +30,10 @@ public class ScrollTestActivity extends Activity {
2630
private List<String> mRightDatas;
2731
private RecyclerView mRvLeft;
2832
private RecyclerView mRvRight;
29-
private MyNestedScrollView nestedScrollView;
33+
private NestedScrollView nestedScrollView;
3034
private TextView mTvTextTop;
35+
private TextView mTvTextTilte;
36+
private LinearLayout mLayoutContent;
3137

3238
@Override
3339
protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -41,6 +47,22 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
4147
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) mTvTextTop.getLayoutParams();
4248
lp.height = ScreenUtil.dip2px(this,200);
4349
mTvTextTop.setLayoutParams(lp);
50+
51+
mTvTextTilte = findViewById(R.id.tv_title);
52+
mLayoutContent = findViewById(R.id.layout_content);
53+
mLayoutContent.post(new Runnable() {
54+
@Override
55+
public void run() {
56+
Rect rectangle= new Rect();
57+
getWindow().getDecorView().getWindowVisibleDisplayFrame(rectangle);
58+
ViewGroup.LayoutParams layoutParams = mLayoutContent.getLayoutParams();
59+
layoutParams.height = ScreenUtil.getScreenHeight(ScrollTestActivity.this) - mTvTextTilte.getMeasuredHeight()-rectangle.top;
60+
Log.e("aaa","----->"+mTvTextTilte.getMeasuredHeight());
61+
Log.e("aaa","statusbar1------>"+rectangle.top);
62+
mLayoutContent.setLayoutParams(layoutParams);
63+
}
64+
});
65+
Log.e("aaa","gggg----->");
4466
initRv();
4567
}
4668

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
package com.hugh.basis.scrolltest.scroll3;
2+
3+
import android.content.Context;
4+
5+
import android.util.Log;
6+
import android.view.LayoutInflater;
7+
import android.view.View;
8+
import android.view.ViewGroup;
9+
10+
11+
import com.hugh.basis.R;
12+
import com.hugh.basis.scrolltest.test2.ScrollTest2Activity;
13+
14+
import java.util.ArrayList;
15+
import java.util.List;
16+
17+
import androidx.recyclerview.widget.LinearLayoutManager;
18+
import androidx.recyclerview.widget.RecyclerView;
19+
20+
21+
public class CommonAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
22+
23+
//item类型
24+
public static final int ITEM_TYPE_HEADER = 0;
25+
public static final int ITEM_TYPE_CONTENT = 1;
26+
public static final int ITEM_TYPE_BOTTOM = 2;
27+
//模拟数据
28+
public String[] texts = {"java"};
29+
private LayoutInflater mLayoutInflater;
30+
private Context mContext;
31+
private int mHeaderCount = 1;//头部View个数
32+
private int mBottomCount = 1;//底部View个数
33+
List<String> stringList = new ArrayList<>();
34+
35+
36+
public CommonAdapter(Context context) {
37+
mContext = context;
38+
mLayoutInflater = LayoutInflater.from(context);
39+
for (int i = 0; i < 20; i++) {
40+
stringList.add("数据--->" + i);
41+
}
42+
}
43+
44+
//内容长度
45+
public int getContentItemCount() {
46+
return texts.length;
47+
}
48+
49+
//判断当前item是否是HeadView
50+
public boolean isHeaderView(int position) {
51+
return mHeaderCount != 0 && position < mHeaderCount;
52+
}
53+
54+
//判断当前item是否是FooterView
55+
public boolean isBottomView(int position) {
56+
return mBottomCount != 0 && position >= (mHeaderCount + getContentItemCount());
57+
}
58+
59+
60+
//判断当前item类型
61+
@Override
62+
public int getItemViewType(int position) {
63+
int dataItemCount = getContentItemCount();
64+
if (mHeaderCount != 0 && position < mHeaderCount) {
65+
//头部View
66+
return ITEM_TYPE_HEADER;
67+
} else if (mBottomCount != 0 && position >= (mHeaderCount + dataItemCount)) {
68+
//底部View
69+
return ITEM_TYPE_BOTTOM;
70+
} else {
71+
//内容View
72+
return ITEM_TYPE_CONTENT;
73+
}
74+
}
75+
76+
//内容 ViewHolder
77+
public static class ContentViewHolder extends RecyclerView.ViewHolder {
78+
private NestedRecyclerView rv_list;
79+
80+
public ContentViewHolder(View itemView) {
81+
super(itemView);
82+
rv_list = (NestedRecyclerView) itemView.findViewById(R.id.rv_item_list);
83+
ScrollManager.getInstance().addSingleView(rv_list);
84+
ScrollManager.getInstance().setLastItemView(itemView);
85+
}
86+
}
87+
88+
//头部 ViewHolder
89+
public static class HeaderViewHolder extends RecyclerView.ViewHolder {
90+
91+
public HeaderViewHolder(View itemView) {
92+
super(itemView);
93+
}
94+
}
95+
96+
//底部 ViewHolder
97+
public static class BottomViewHolder extends RecyclerView.ViewHolder {
98+
99+
public BottomViewHolder(View itemView) {
100+
super(itemView);
101+
}
102+
}
103+
104+
@Override
105+
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
106+
if (viewType == ITEM_TYPE_HEADER) {
107+
return new HeaderViewHolder(mLayoutInflater.inflate(R.layout.item_header, parent, false));
108+
} else if (viewType == ITEM_TYPE_CONTENT) {
109+
return new ContentViewHolder(mLayoutInflater.inflate(R.layout.item_list_content2, parent, false));
110+
} else if (viewType == ITEM_TYPE_BOTTOM) {
111+
return new BottomViewHolder(mLayoutInflater.inflate(R.layout.item_footer, parent, false));
112+
}
113+
return null;
114+
}
115+
116+
@Override
117+
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
118+
if (holder instanceof HeaderViewHolder) {
119+
holder.itemView.setOnClickListener(new View.OnClickListener() {
120+
@Override
121+
public void onClick(View v) {
122+
Log.e("aaa", "header------------>");
123+
}
124+
});
125+
} else if (holder instanceof ContentViewHolder) {
126+
CustomLayoutManager layoutManager = new CustomLayoutManager(mContext, ((ContentViewHolder) holder).rv_list);
127+
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
128+
((ContentViewHolder) holder).rv_list.setLayoutManager(layoutManager);
129+
ScrollTest3Activity.SingleTextAdapter adapter = new ScrollTest3Activity.SingleTextAdapter();
130+
adapter.setData(stringList);
131+
((ContentViewHolder) holder).rv_list.setAdapter(adapter);
132+
133+
} else if (holder instanceof BottomViewHolder) {
134+
135+
}
136+
}
137+
138+
@Override
139+
public int getItemCount() {
140+
return mHeaderCount + getContentItemCount() + mBottomCount;
141+
}
142+
143+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.hugh.basis.scrolltest.scroll3;
2+
3+
import android.content.Context;
4+
5+
import androidx.recyclerview.widget.LinearLayoutManager;
6+
import androidx.recyclerview.widget.RecyclerView;
7+
8+
9+
public class CustomLayoutManager extends LinearLayoutManager {
10+
11+
private NestedRecyclerView musRecyclerView;
12+
13+
public CustomLayoutManager(Context context) {
14+
super(context);
15+
}
16+
17+
public CustomLayoutManager(Context context, NestedRecyclerView musRecyclerView) {
18+
super(context);
19+
this.musRecyclerView = musRecyclerView;
20+
}
21+
22+
@Override
23+
public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state) {
24+
try {
25+
int scroll = super.scrollVerticallyBy(dy, recycler, state);
26+
if (musRecyclerView != null) {
27+
if (scroll == 0) {
28+
if (dy > 0) {
29+
musRecyclerView.setReachBottomEdge(true);
30+
} else if (dy < 0) {
31+
musRecyclerView.setReachTopEdge(true);
32+
}
33+
} else if (dy != 0) {
34+
musRecyclerView.setReachBottomEdge(false);
35+
musRecyclerView.setReachTopEdge(false);
36+
}
37+
}
38+
return scroll;
39+
} catch (Throwable e) {
40+
e.printStackTrace();
41+
}
42+
return 0;
43+
}
44+
45+
}

0 commit comments

Comments
 (0)