Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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)

AltStyle によって変換されたページ (->オリジナル) /