Add find visible items for list and flowlayout
This commit is contained in:
@@ -32,7 +32,9 @@ import com.github.pengfeizhou.jscore.JSValue;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
@@ -328,28 +330,56 @@ public class FlowLayoutNode extends SuperNode<RecyclerView> implements IDoricScr
|
||||
|
||||
@DoricMethod
|
||||
public JSONArray findVisibleItems() {
|
||||
int[] startPos = staggeredGridLayoutManager.findFirstVisibleItemPositions(null);
|
||||
int[] endPos = staggeredGridLayoutManager.findLastVisibleItemPositions(null);
|
||||
int[] firstPositions = staggeredGridLayoutManager.findFirstVisibleItemPositions(null);
|
||||
int[] lastPositions = staggeredGridLayoutManager.findLastVisibleItemPositions(null);
|
||||
JSONArray jsonArray = new JSONArray();
|
||||
for (int i = 0; i < staggeredGridLayoutManager.getSpanCount(); i++) {
|
||||
jsonArray.put(new JSONBuilder()
|
||||
.put("first", calibratePosition(startPos[i]))
|
||||
.put("last", calibratePosition(endPos[i]))
|
||||
.toJSONObject());
|
||||
int first = firstPositions[0];
|
||||
for (int firstPosition : firstPositions) {
|
||||
first = Math.min(first, firstPosition);
|
||||
}
|
||||
int last = lastPositions[0];
|
||||
for (int lastPosition : lastPositions) {
|
||||
last = Math.max(last, lastPosition);
|
||||
}
|
||||
for (int i = first; i <= last; i++) {
|
||||
jsonArray.put(i);
|
||||
}
|
||||
return jsonArray;
|
||||
}
|
||||
|
||||
@DoricMethod
|
||||
public JSONArray findCompletelyVisibleItems() {
|
||||
int[] startPos = staggeredGridLayoutManager.findFirstCompletelyVisibleItemPositions(null);
|
||||
int[] endPos = staggeredGridLayoutManager.findLastCompletelyVisibleItemPositions(null);
|
||||
JSONArray jsonArray = new JSONArray();
|
||||
int[] firstPositions = staggeredGridLayoutManager.findFirstVisibleItemPositions(null);
|
||||
int[] lastPositions = staggeredGridLayoutManager.findLastVisibleItemPositions(null);
|
||||
Set<Integer> positions = new HashSet<>();
|
||||
int first = firstPositions[0];
|
||||
for (int firstPosition : firstPositions) {
|
||||
first = Math.min(first, firstPosition);
|
||||
}
|
||||
int last = lastPositions[0];
|
||||
for (int lastPosition : lastPositions) {
|
||||
last = Math.max(last, lastPosition);
|
||||
}
|
||||
for (int i = first; i <= last; i++) {
|
||||
positions.add(i);
|
||||
}
|
||||
int[] firstCompletelyVisibleItemPositions = staggeredGridLayoutManager.findFirstCompletelyVisibleItemPositions(null);
|
||||
int[] lastCompletelyVisibleItemPositions = staggeredGridLayoutManager.findLastCompletelyVisibleItemPositions(null);
|
||||
for (int i = 0; i < staggeredGridLayoutManager.getSpanCount(); i++) {
|
||||
jsonArray.put(new JSONBuilder()
|
||||
.put("first", calibratePosition(startPos[i]))
|
||||
.put("last", calibratePosition(endPos[i]))
|
||||
.toJSONObject());
|
||||
int firstPosition = firstPositions[i];
|
||||
int firstCompletelyVisibleItemPosition = firstCompletelyVisibleItemPositions[i];
|
||||
if (firstCompletelyVisibleItemPosition != firstPosition) {
|
||||
positions.remove(firstPosition);
|
||||
}
|
||||
int lastPosition = lastPositions[i];
|
||||
int lastCompletelyVisibleItemPosition = lastCompletelyVisibleItemPositions[i];
|
||||
if (lastCompletelyVisibleItemPosition != lastPosition) {
|
||||
positions.remove(lastPosition);
|
||||
}
|
||||
}
|
||||
JSONArray jsonArray = new JSONArray();
|
||||
for (int position : positions) {
|
||||
jsonArray.put(position);
|
||||
}
|
||||
return jsonArray;
|
||||
}
|
||||
|
@@ -33,6 +33,7 @@ import com.github.pengfeizhou.jscore.JSONBuilder;
|
||||
import com.github.pengfeizhou.jscore.JSObject;
|
||||
import com.github.pengfeizhou.jscore.JSValue;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.HashSet;
|
||||
@@ -300,25 +301,29 @@ public class ListNode extends SuperNode<RecyclerView> implements IDoricScrollabl
|
||||
}
|
||||
|
||||
@DoricMethod
|
||||
public JSONObject findVisibleItems() {
|
||||
public JSONArray findVisibleItems() {
|
||||
LinearLayoutManager linearLayoutManager = (LinearLayoutManager) this.mView.getLayoutManager();
|
||||
assert linearLayoutManager != null;
|
||||
int startPos = linearLayoutManager.findFirstVisibleItemPosition();
|
||||
int endPos = linearLayoutManager.findLastVisibleItemPosition();
|
||||
return new JSONBuilder()
|
||||
.put("first", calibratePosition(startPos))
|
||||
.put("last", calibratePosition(endPos)).toJSONObject();
|
||||
JSONArray jsonArray = new JSONArray();
|
||||
for (int i = startPos; i <= endPos; i++) {
|
||||
jsonArray.put(i);
|
||||
}
|
||||
return jsonArray;
|
||||
}
|
||||
|
||||
@DoricMethod
|
||||
public JSONObject findCompletelyVisibleItems() {
|
||||
public JSONArray findCompletelyVisibleItems() {
|
||||
LinearLayoutManager linearLayoutManager = (LinearLayoutManager) this.mView.getLayoutManager();
|
||||
assert linearLayoutManager != null;
|
||||
int startPos = linearLayoutManager.findFirstCompletelyVisibleItemPosition();
|
||||
int endPos = linearLayoutManager.findLastCompletelyVisibleItemPosition();
|
||||
return new JSONBuilder()
|
||||
.put("first", calibratePosition(startPos))
|
||||
.put("last", calibratePosition(endPos)).toJSONObject();
|
||||
JSONArray jsonArray = new JSONArray();
|
||||
for (int i = startPos; i <= endPos; i++) {
|
||||
jsonArray.put(i);
|
||||
}
|
||||
return jsonArray;
|
||||
}
|
||||
|
||||
private void moveToPosition(int pos, boolean smooth) {
|
||||
|
Reference in New Issue
Block a user