feature:CoordinateLayout support multi set

This commit is contained in:
pengfei.zhou
2020-03-10 17:23:55 +08:00
committed by osborn
parent eceb7b9567
commit 01d736c5a6
12 changed files with 106 additions and 28 deletions

View File

@@ -21,5 +21,7 @@ package pub.doric;
* @CreateDate: 2020-02-13
*/
public interface IDoricScrollable {
void setScrollChangeListener(DoricScrollChangeListener listener);
void addScrollChangeListener(DoricScrollChangeListener listener);
void removeScrollChangeListener(DoricScrollChangeListener listener);
}

View File

@@ -119,8 +119,7 @@ public class CoordinatorPlugin extends DoricJavaPlugin {
final boolean finalIsNavBar = isNavBar;
if (finalScrollNode instanceof IDoricScrollable) {
((IDoricScrollable) finalScrollNode).setScrollChangeListener(new DoricScrollChangeListener() {
((IDoricScrollable) finalScrollNode).addScrollChangeListener(new DoricScrollChangeListener() {
@Override
public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
if (scrollY <= startAnchor) {

View File

@@ -22,6 +22,9 @@ import com.github.pengfeizhou.jscore.JSONBuilder;
import com.github.pengfeizhou.jscore.JSObject;
import com.github.pengfeizhou.jscore.JSValue;
import java.util.HashSet;
import java.util.Set;
import pub.doric.DoricContext;
import pub.doric.DoricScrollChangeListener;
import pub.doric.IDoricScrollable;
@@ -39,7 +42,7 @@ import pub.doric.widget.HVScrollView;
public class ScrollerNode extends SuperNode<HVScrollView> implements IDoricScrollable {
private String mChildViewId;
private ViewNode mChildNode;
private DoricScrollChangeListener doricScrollChangeListener;
private Set<DoricScrollChangeListener> listeners = new HashSet<>();
private String onScrollFuncId;
private String onScrollEndFuncId;
@@ -67,8 +70,8 @@ public class ScrollerNode extends SuperNode<HVScrollView> implements IDoricScrol
@Override
public void onScrollChange(HVScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
if (doricScrollChangeListener != null) {
doricScrollChangeListener.onScrollChange(v, scrollX, scrollY, oldScrollX, oldScrollY);
for (DoricScrollChangeListener listener : listeners) {
listener.onScrollChange(v, scrollX, scrollY, oldScrollX, oldScrollY);
}
if (!TextUtils.isEmpty(onScrollFuncId)) {
callJSResponse(onScrollFuncId, new JSONBuilder()
@@ -147,8 +150,13 @@ public class ScrollerNode extends SuperNode<HVScrollView> implements IDoricScrol
}
@Override
public void setScrollChangeListener(DoricScrollChangeListener listener) {
this.doricScrollChangeListener = listener;
public void addScrollChangeListener(DoricScrollChangeListener listener) {
listeners.add(listener);
}
@Override
public void removeScrollChangeListener(DoricScrollChangeListener listener) {
listeners.remove(listener);
}
@DoricMethod

View File

@@ -26,6 +26,9 @@ import androidx.recyclerview.widget.StaggeredGridLayoutManager;
import com.github.pengfeizhou.jscore.JSObject;
import com.github.pengfeizhou.jscore.JSValue;
import java.util.HashSet;
import java.util.Set;
import pub.doric.DoricContext;
import pub.doric.DoricScrollChangeListener;
import pub.doric.IDoricScrollable;
@@ -76,7 +79,7 @@ public class FlowLayoutNode extends SuperNode<RecyclerView> implements IDoricScr
String onLoadMoreFuncId;
boolean loadMore = false;
String loadMoreViewId;
private DoricScrollChangeListener doricScrollChangeListener;
private Set<DoricScrollChangeListener> listeners = new HashSet<>();
public FlowLayoutNode(DoricContext doricContext) {
super(doricContext);
@@ -201,18 +204,24 @@ public class FlowLayoutNode extends SuperNode<RecyclerView> implements IDoricScr
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (doricScrollChangeListener != null) {
for (DoricScrollChangeListener listener : listeners) {
int offsetX = recyclerView.computeHorizontalScrollOffset();
int offsetY = recyclerView.computeVerticalScrollOffset();
doricScrollChangeListener.onScrollChange(recyclerView, offsetX, offsetY, offsetX - dx, offsetY - dy);
listener.onScrollChange(recyclerView, offsetX, offsetY, offsetX - dx, offsetY - dy);
}
}
});
return recyclerView;
}
@Override
public void setScrollChangeListener(DoricScrollChangeListener listener) {
this.doricScrollChangeListener = listener;
public void addScrollChangeListener(DoricScrollChangeListener listener) {
listeners.add(listener);
}
@Override
public void removeScrollChangeListener(DoricScrollChangeListener listener) {
listeners.remove(listener);
}
}

View File

@@ -26,6 +26,9 @@ import androidx.recyclerview.widget.RecyclerView;
import com.github.pengfeizhou.jscore.JSObject;
import com.github.pengfeizhou.jscore.JSValue;
import java.util.HashSet;
import java.util.Set;
import pub.doric.DoricContext;
import pub.doric.DoricScrollChangeListener;
import pub.doric.IDoricScrollable;
@@ -48,7 +51,7 @@ public class ListNode extends SuperNode<RecyclerView> implements IDoricScrollabl
SparseArray<String> itemValues = new SparseArray<>();
boolean loadMore = false;
String loadMoreViewId;
private DoricScrollChangeListener doricScrollChangeListener;
private Set<DoricScrollChangeListener> listeners = new HashSet<>();
public ListNode(DoricContext doricContext) {
super(doricContext);
@@ -79,10 +82,10 @@ public class ListNode extends SuperNode<RecyclerView> implements IDoricScrollabl
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (doricScrollChangeListener != null) {
for (DoricScrollChangeListener listener : listeners) {
int offsetX = recyclerView.computeHorizontalScrollOffset();
int offsetY = recyclerView.computeVerticalScrollOffset();
doricScrollChangeListener.onScrollChange(recyclerView, offsetX, offsetY, offsetX - dx, offsetY - dy);
listener.onScrollChange(recyclerView, offsetX, offsetY, offsetX - dx, offsetY - dy);
}
}
});
@@ -162,7 +165,12 @@ public class ListNode extends SuperNode<RecyclerView> implements IDoricScrollabl
}
@Override
public void setScrollChangeListener(DoricScrollChangeListener listener) {
this.doricScrollChangeListener = listener;
public void addScrollChangeListener(DoricScrollChangeListener listener) {
listeners.add(listener);
}
@Override
public void removeScrollChangeListener(DoricScrollChangeListener listener) {
listeners.remove(listener);
}
}