@quicktvui/ai 1.0.7 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/rules/.clinerules +27 -4
- package/rules/.cursorrules +27 -4
- package/rules/.github/copilot-instructions.md +27 -4
- package/rules/.source/hippy/extend_views/CoverFlowHorizontalView.java +203 -0
- package/rules/.source/hippy/extend_views/CoverFlowVerticalView.java +203 -0
- package/rules/.source/hippy/extend_views/CoverFlowViewController.java +195 -0
- package/rules/.source/hippy/extend_views/EngineRootView.java +125 -0
- package/rules/.source/hippy/extend_views/ExtendTag.java +83 -0
- package/rules/.source/hippy/extend_views/FocusSearchHelper.java +124 -0
- package/rules/.source/hippy/extend_views/IRecyclerItemView.java +12 -0
- package/rules/.source/hippy/extend_views/JSEventHandleView.java +5 -0
- package/rules/.source/hippy/extend_views/MarqueeRelayManager.java +133 -0
- package/rules/.source/hippy/extend_views/MarqueeRelayTextView.java +211 -0
- package/rules/.source/hippy/extend_views/ProgressBarView.java +83 -0
- package/rules/.source/hippy/extend_views/ProgressBarViewController.java +145 -0
- package/rules/.source/hippy/extend_views/SeekBarView.java +104 -0
- package/rules/.source/hippy/extend_views/SeekBarViewController.java +218 -0
- package/rules/.source/hippy/extend_views/StateImageView.java +149 -0
- package/rules/.source/hippy/extend_views/StateImageViewController.java +34 -0
- package/rules/.source/hippy/extend_views/TVButtonView.java +314 -0
- package/rules/.source/hippy/extend_views/TVButtonViewController.java +89 -0
- package/rules/.source/hippy/extend_views/TVTextView.java +684 -0
- package/rules/.source/hippy/extend_views/TVViewActor.java +811 -0
- package/rules/.source/hippy/extend_views/TVViewActorHost.java +6 -0
- package/rules/.source/hippy/extend_views/TVViewActor/346/216/245/345/205/245.md +66 -0
- package/rules/.source/hippy/extend_views/TemplateUtil.java +336 -0
- package/rules/.source/hippy/extend_views/TextButtonNode.java +47 -0
- package/rules/.source/hippy/extend_views/TextViewController.java +377 -0
- package/rules/.source/hippy/extend_views/fastlist/CenterFlyInAnimator.java +96 -0
- package/rules/.source/hippy/extend_views/fastlist/ChildOnScreenScroller.java +548 -0
- package/rules/.source/hippy/extend_views/fastlist/ClonedViewTag.java +17 -0
- package/rules/.source/hippy/extend_views/fastlist/EventDeliverer.java +55 -0
- package/rules/.source/hippy/extend_views/fastlist/FastAdapter.java +4683 -0
- package/rules/.source/hippy/extend_views/fastlist/FastAdapterUtil.java +982 -0
- package/rules/.source/hippy/extend_views/fastlist/FastFlexNode.java +48 -0
- package/rules/.source/hippy/extend_views/fastlist/FastFlexView.java +873 -0
- package/rules/.source/hippy/extend_views/fastlist/FastFlexViewController.java +130 -0
- package/rules/.source/hippy/extend_views/fastlist/FastItemNode.java +67 -0
- package/rules/.source/hippy/extend_views/fastlist/FastItemView.java +306 -0
- package/rules/.source/hippy/extend_views/fastlist/FastItemViewController.java +106 -0
- package/rules/.source/hippy/extend_views/fastlist/FastListModule.java +95 -0
- package/rules/.source/hippy/extend_views/fastlist/FastListNode.java +90 -0
- package/rules/.source/hippy/extend_views/fastlist/FastListView.java +2466 -0
- package/rules/.source/hippy/extend_views/fastlist/FastListViewController.java +1038 -0
- package/rules/.source/hippy/extend_views/fastlist/FastListView/346/270/262/346/237/223/346/265/201/347/250/213/345/233/276.graffle +0 -0
- package/rules/.source/hippy/extend_views/fastlist/FastPendingView.java +47 -0
- package/rules/.source/hippy/extend_views/fastlist/ItemDecorations.java +71 -0
- package/rules/.source/hippy/extend_views/fastlist/ItemStoreNode.java +64 -0
- package/rules/.source/hippy/extend_views/fastlist/ItemStoreView.java +13 -0
- package/rules/.source/hippy/extend_views/fastlist/ItemStoreViewController.java +45 -0
- package/rules/.source/hippy/extend_views/fastlist/ListItemHolder.java +7 -0
- package/rules/.source/hippy/extend_views/fastlist/ListViewControlProp.java +41 -0
- package/rules/.source/hippy/extend_views/fastlist/MouseRecycleView.java +509 -0
- package/rules/.source/hippy/extend_views/fastlist/OnFastItemClickListener.java +12 -0
- package/rules/.source/hippy/extend_views/fastlist/OnFastItemFocusChangeListener.java +9 -0
- package/rules/.source/hippy/extend_views/fastlist/OnFastScrollStateChangedListener.java +7 -0
- package/rules/.source/hippy/extend_views/fastlist/PendingListNode.java +18 -0
- package/rules/.source/hippy/extend_views/fastlist/PendingViewController.java +13 -0
- package/rules/.source/hippy/extend_views/fastlist/PostHandlerView.java +6 -0
- package/rules/.source/hippy/extend_views/fastlist/PostTaskHolder.java +20 -0
- package/rules/.source/hippy/extend_views/fastlist/ReplaceChildController.java +105 -0
- package/rules/.source/hippy/extend_views/fastlist/ReplaceChildView.java +312 -0
- package/rules/.source/hippy/extend_views/fastlist/TVListView.java +3692 -0
- package/rules/.source/hippy/extend_views/fastlist/TemplateCodeParser.java +247 -0
- package/rules/.source/hippy/extend_views/fastlist/Utils.java +572 -0
- package/rules/.source/hippy/extend_views/fastlist/ViewTag.java +317 -0
- package/rules/.source/hippy/extend_views/fastlist/VirtualListView.java +8 -0
- package/rules/.source/hippy/extend_views/fastlist/diff/FastListDataBindingHelper.java +320 -0
- package/rules/.source/hippy/extend_views/fastlist/diff/KeyDiffHelper.java +289 -0
- package/rules/.source/hippy/extend_views/fastlist/diff/NoKeyDiffHelper.java +278 -0
- package/rules/.source/hippy/extend_views/tag/FontTag.java +53 -0
- package/rules/.source/hippy/extend_views/tag/HtmlTag.java +191 -0
- package/rules/.source/hippy/extend_views/tag/HtmlTagHandler.java +185 -0
- package/rules/.source/hippy/extend_views/tag/SpanTag.java +160 -0
- package/rules/.source/hippy/extend_views/tag/TextFontSpan.java +102 -0
- package/rules/.source/hippy/extend_views/waterfall/Chunk.java +10 -0
- package/rules/.source/hippy/extend_views/waterfall/ChunkGroup.java +5 -0
- package/rules/.source/hippy/extend_views/waterfall/Section.java +4 -0
- package/rules/.source/hippy/extend_views/waterfall/Tabs.java +5 -0
- package/rules/.source/hippy/extend_views/waterfall/WaterfallUtils.java +26 -0
- package/rules/.source/hippy/hippy_uimanager/ControllerHolder.java +30 -0
- package/rules/.source/hippy/hippy_uimanager/ControllerManager.java +651 -0
- package/rules/.source/hippy/hippy_uimanager/ControllerRegistry.java +102 -0
- package/rules/.source/hippy/hippy_uimanager/ControllerUpdateManger.java +252 -0
- package/rules/.source/hippy/hippy_uimanager/CustomControllerHelper.java +425 -0
- package/rules/.source/hippy/hippy_uimanager/DiffUtils.java +526 -0
- package/rules/.source/hippy/hippy_uimanager/ExtendViewGroup.java +36 -0
- package/rules/.source/hippy/hippy_uimanager/HippyCustomViewCreator.java +29 -0
- package/rules/.source/hippy/hippy_uimanager/HippyGroupController.java +83 -0
- package/rules/.source/hippy/hippy_uimanager/HippyViewBase.java +27 -0
- package/rules/.source/hippy/hippy_uimanager/HippyViewController.java +2189 -0
- package/rules/.source/hippy/hippy_uimanager/HippyViewEvent.java +52 -0
- package/rules/.source/hippy/hippy_uimanager/IHippyZIndexViewGroup.java +24 -0
- package/rules/.source/hippy/hippy_uimanager/InternalExtendViewUtil.java +395 -0
- package/rules/.source/hippy/hippy_uimanager/ListItemRenderNode.java +143 -0
- package/rules/.source/hippy/hippy_uimanager/ListViewRenderNode.java +44 -0
- package/rules/.source/hippy/hippy_uimanager/MatrixUtil.java +470 -0
- package/rules/.source/hippy/hippy_uimanager/NativeGestureDispatcher.java +349 -0
- package/rules/.source/hippy/hippy_uimanager/NativeGestureProcessor.java +188 -0
- package/rules/.source/hippy/hippy_uimanager/PullFooterRenderNode.java +43 -0
- package/rules/.source/hippy/hippy_uimanager/PullHeaderRenderNode.java +43 -0
- package/rules/.source/hippy/hippy_uimanager/RenderManager.java +304 -0
- package/rules/.source/hippy/hippy_uimanager/RenderNode.java +533 -0
- package/rules/.source/hippy/hippy_uimanager/StateView.java +17 -0
- package/rules/.source/hippy/hippy_uimanager/TransformUtil.java +125 -0
- package/rules/.source/hippy/hippy_uimanager/ViewGroupDrawingOrderHelper.java +108 -0
- package/rules/.source/hippy/hippy_uimanager/ViewStateProvider.java +10 -0
- package/rules/.source/hippy/hippy_views/audioview/AudioPlayManager.java +457 -0
- package/rules/.source/hippy/hippy_views/audioview/AudioView.java +225 -0
- package/rules/.source/hippy/hippy_views/audioview/AudioViewController.java +135 -0
- package/rules/.source/hippy/hippy_views/common/CommonBackgroundDrawable.java +58 -0
- package/rules/.source/hippy/hippy_views/common/CommonBorder.java +37 -0
- package/rules/.source/hippy/hippy_views/custom/HippyCustomPropsController.java +61 -0
- package/rules/.source/hippy/hippy_views/hippylist/HippyRecyclerListAdapter.java +399 -0
- package/rules/.source/hippy/hippy_views/hippylist/HippyRecyclerView.java +378 -0
- package/rules/.source/hippy/hippy_views/hippylist/HippyRecyclerViewController.java +187 -0
- package/rules/.source/hippy/hippy_views/hippylist/HippyRecyclerViewHolder.java +39 -0
- package/rules/.source/hippy/hippy_views/hippylist/HippyRecyclerViewWrapper.java +134 -0
- package/rules/.source/hippy/hippy_views/hippylist/NodePositionHelper.java +55 -0
- package/rules/.source/hippy/hippy_views/hippylist/PreloadHelper.java +54 -0
- package/rules/.source/hippy/hippy_views/hippylist/PullFooterEventHelper.java +61 -0
- package/rules/.source/hippy/hippy_views/hippylist/PullHeaderEventHelper.java +127 -0
- package/rules/.source/hippy/hippy_views/hippylist/RecyclerViewEventHelper.java +394 -0
- package/rules/.source/hippy/hippy_views/image/HippyContentDrawable.java +113 -0
- package/rules/.source/hippy/hippy_views/image/HippyImageView.java +1608 -0
- package/rules/.source/hippy/hippy_views/image/HippyImageViewController.java +382 -0
- package/rules/.source/hippy/hippy_views/image/IImageStateListener.java +7 -0
- package/rules/.source/hippy/hippy_views/list/ChildOnScreenScroller.java +255 -0
- package/rules/.source/hippy/hippy_views/list/HippyListAdapter.java +647 -0
- package/rules/.source/hippy/hippy_views/list/HippyListItemView.java +162 -0
- package/rules/.source/hippy/hippy_views/list/HippyListItemViewController.java +45 -0
- package/rules/.source/hippy/hippy_views/list/HippyListView.java +915 -0
- package/rules/.source/hippy/hippy_views/list/HippyListViewController.java +622 -0
- package/rules/.source/hippy/hippy_views/list/HippyRecycler.java +31 -0
- package/rules/.source/hippy/hippy_views/list/IRecycleItemTypeChange.java +23 -0
- package/rules/.source/hippy/hippy_views/list/ItemDecorations.java +70 -0
- package/rules/.source/hippy/hippy_views/list/NegativeLongKeyFlinger.java +156 -0
- package/rules/.source/hippy/hippy_views/list/NodeHolder.java +34 -0
- package/rules/.source/hippy/hippy_views/list/RecycleViewFlinger.java +126 -0
- package/rules/.source/hippy/hippy_views/list/TVRecyclerView.java +2070 -0
- package/rules/.source/hippy/hippy_views/list/TVSingleLineListView.java +15 -0
- package/rules/.source/hippy/hippy_views/modal/HippyModalHostManager.java +102 -0
- package/rules/.source/hippy/hippy_views/modal/HippyModalHostView.java +597 -0
- package/rules/.source/hippy/hippy_views/modal/ModalHostHelper.java +46 -0
- package/rules/.source/hippy/hippy_views/modal/ModalStyleNode.java +34 -0
- package/rules/.source/hippy/hippy_views/modal/RequestCloseEvent.java +32 -0
- package/rules/.source/hippy/hippy_views/modal/ShowEvent.java +31 -0
- package/rules/.source/hippy/hippy_views/navigator/Navigator.java +126 -0
- package/rules/.source/hippy/hippy_views/navigator/NavigatorController.java +120 -0
- package/rules/.source/hippy/hippy_views/refresh/HippyPullFooterView.java +47 -0
- package/rules/.source/hippy/hippy_views/refresh/HippyPullFooterViewController.java +65 -0
- package/rules/.source/hippy/hippy_views/refresh/HippyPullHeaderView.java +39 -0
- package/rules/.source/hippy/hippy_views/refresh/HippyPullHeaderViewController.java +104 -0
- package/rules/.source/hippy/hippy_views/refresh/RefreshWrapper.java +237 -0
- package/rules/.source/hippy/hippy_views/refresh/RefreshWrapperController.java +62 -0
- package/rules/.source/hippy/hippy_views/refresh/RefreshWrapperItemController.java +39 -0
- package/rules/.source/hippy/hippy_views/refresh/RefreshWrapperItemView.java +26 -0
- package/rules/.source/hippy/hippy_views/scroll/HippyHorizontalScrollView.java +500 -0
- package/rules/.source/hippy/hippy_views/scroll/HippyOnScrollHelper.java +39 -0
- package/rules/.source/hippy/hippy_views/scroll/HippyScrollView.java +46 -0
- package/rules/.source/hippy/hippy_views/scroll/HippyScrollViewController.java +178 -0
- package/rules/.source/hippy/hippy_views/scroll/HippyScrollViewEventHelper.java +92 -0
- package/rules/.source/hippy/hippy_views/scroll/HippyVerticalScrollView.java +522 -0
- package/rules/.source/hippy/hippy_views/text/HippyTextView.java +512 -0
- package/rules/.source/hippy/hippy_views/text/HippyTextViewController.java +77 -0
- package/rules/.source/hippy/hippy_views/textinput/HippyTextInput.java +668 -0
- package/rules/.source/hippy/hippy_views/textinput/HippyTextInputController.java +528 -0
- package/rules/.source/hippy/hippy_views/textinput/TextInputNode.java +115 -0
- package/rules/.source/hippy/hippy_views/videoview/APEZProvider.java +287 -0
- package/rules/.source/hippy/hippy_views/videoview/APKExpansionSupport.java +82 -0
- package/rules/.source/hippy/hippy_views/videoview/PivotPoint.java +13 -0
- package/rules/.source/hippy/hippy_views/videoview/ScalableType.java +34 -0
- package/rules/.source/hippy/hippy_views/videoview/ScalableVideoView.java +265 -0
- package/rules/.source/hippy/hippy_views/videoview/ScaleManager.java +191 -0
- package/rules/.source/hippy/hippy_views/videoview/Size.java +19 -0
- package/rules/.source/hippy/hippy_views/videoview/VideoHippyView.java +917 -0
- package/rules/.source/hippy/hippy_views/videoview/VideoHippyViewController.java +236 -0
- package/rules/.source/hippy/hippy_views/videoview/ZipResourceFile.java +427 -0
- package/rules/.source/hippy/hippy_views/view/CardRootView.java +28 -0
- package/rules/.source/hippy/hippy_views/view/CustomLayoutView.java +10 -0
- package/rules/.source/hippy/hippy_views/view/CustomNodeView.java +5 -0
- package/rules/.source/hippy/hippy_views/view/DialogViewGroup.java +113 -0
- package/rules/.source/hippy/hippy_views/view/HippyViewGroup.java +2042 -0
- package/rules/.source/hippy/hippy_views/view/HippyViewGroupController.java +583 -0
- package/rules/.source/hippy/hippy_views/view/WindowRoot.java +5 -0
- package/rules/.source/hippy/hippy_views/viewpager/HippyViewPager.java +308 -0
- package/rules/.source/hippy/hippy_views/viewpager/HippyViewPagerAdapter.java +148 -0
- package/rules/.source/hippy/hippy_views/viewpager/HippyViewPagerController.java +246 -0
- package/rules/.source/hippy/hippy_views/viewpager/HippyViewPagerItem.java +27 -0
- package/rules/.source/hippy/hippy_views/viewpager/HippyViewPagerItemController.java +42 -0
- package/rules/.source/hippy/hippy_views/viewpager/ViewPagerPageChangeListener.java +114 -0
- package/rules/.source/hippy/hippy_views/viewpager/event/HippyPageItemExposureEvent.java +40 -0
- package/rules/.source/hippy/hippy_views/viewpager/event/HippyPageScrollEvent.java +43 -0
- package/rules/.source/hippy/hippy_views/viewpager/event/HippyPageScrollStateChangedEvent.java +42 -0
- package/rules/.source/hippy/hippy_views/viewpager/event/HippyPageSelectedEvent.java +42 -0
- package/rules/.source/hippy/hippy_views/webview/HippyWebView.java +160 -0
- package/rules/.source/hippy/hippy_views/webview/HippyWebViewBridge.java +20 -0
- package/rules/.source/hippy/hippy_views/webview/HippyWebViewController.java +103 -0
- package/rules/.source/hippy/hippy_views/webview/HippyWebViewInner.java +77 -0
- package/rules/.windsurfrules +27 -4
- package/rules/AGENTS.md +27 -4
- package/rules/CLAUDE.md +27 -3
- package/rules/GEMINI.md +25 -3
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
/* Tencent is pleased to support the open source community by making Hippy available.
|
|
2
|
+
* Copyright (C) 2018 THL A29 Limited, a Tencent company. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
package com.tencent.mtt.hippy.views.hippylist;
|
|
18
|
+
|
|
19
|
+
import android.content.Context;
|
|
20
|
+
import android.graphics.Rect;
|
|
21
|
+
import android.support.annotation.NonNull;
|
|
22
|
+
import android.support.annotation.Nullable;
|
|
23
|
+
import android.support.v7.widget.HippyRecyclerViewBase;
|
|
24
|
+
import android.support.v7.widget.IHippyViewAboundListener;
|
|
25
|
+
import android.support.v7.widget.LinearLayoutManager;
|
|
26
|
+
import android.util.AttributeSet;
|
|
27
|
+
import android.view.MotionEvent;
|
|
28
|
+
import android.view.View;
|
|
29
|
+
import android.view.ViewGroup;
|
|
30
|
+
import com.tencent.mtt.hippy.HippyEngineContext;
|
|
31
|
+
import com.tencent.mtt.hippy.utils.LogUtils;
|
|
32
|
+
import com.tencent.mtt.hippy.utils.PixelUtil;
|
|
33
|
+
import com.tencent.mtt.nxeasy.recyclerview.helper.skikcy.IHeaderAttachListener;
|
|
34
|
+
import com.tencent.mtt.nxeasy.recyclerview.helper.skikcy.IHeaderHost;
|
|
35
|
+
import com.tencent.mtt.nxeasy.recyclerview.helper.skikcy.StickyHeaderHelper;
|
|
36
|
+
|
|
37
|
+
public class HippyRecyclerView<ADP extends HippyRecyclerListAdapter> extends HippyRecyclerViewBase
|
|
38
|
+
implements IHeaderAttachListener, IHippyViewAboundListener {
|
|
39
|
+
|
|
40
|
+
protected HippyEngineContext hippyEngineContext;
|
|
41
|
+
protected ADP listAdapter;
|
|
42
|
+
protected boolean isEnableScroll = true; //使能ListView的滚动功能
|
|
43
|
+
protected StickyHeaderHelper stickyHeaderHelper; //支持吸顶
|
|
44
|
+
protected IHeaderHost headerHost; //用于pullHeader下拉刷新
|
|
45
|
+
protected LayoutManager layoutManager;
|
|
46
|
+
protected RecyclerViewEventHelper recyclerViewEventHelper;//事件集合
|
|
47
|
+
private NodePositionHelper nodePositionHelper;
|
|
48
|
+
protected int renderNodeCount = 0;
|
|
49
|
+
|
|
50
|
+
public HippyRecyclerView(Context context) {
|
|
51
|
+
super(context);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
public HippyRecyclerView(@NonNull Context context, @Nullable AttributeSet attrs) {
|
|
55
|
+
super(context, attrs);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
public HippyRecyclerView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyle) {
|
|
59
|
+
super(context, attrs, defStyle);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
public ADP getAdapter() {
|
|
63
|
+
return listAdapter;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
@Override
|
|
67
|
+
public void setAdapter(@Nullable Adapter adapter) {
|
|
68
|
+
listAdapter = (ADP) adapter;
|
|
69
|
+
super.setAdapter(adapter);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
public NodePositionHelper getNodePositionHelper() {
|
|
73
|
+
if (nodePositionHelper == null) {
|
|
74
|
+
nodePositionHelper = new NodePositionHelper();
|
|
75
|
+
}
|
|
76
|
+
return nodePositionHelper;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
public void setOrientation(LinearLayoutManager layoutManager) {
|
|
80
|
+
this.layoutManager = layoutManager;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
public void setHeaderHost(IHeaderHost headerHost) {
|
|
84
|
+
this.headerHost = headerHost;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
public void setHippyEngineContext(HippyEngineContext hippyEngineContext) {
|
|
88
|
+
this.hippyEngineContext = hippyEngineContext;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
public void initRecyclerView() {
|
|
92
|
+
setAdapter(new HippyRecyclerListAdapter<HippyRecyclerView>(this, this.hippyEngineContext));
|
|
93
|
+
intEventHelper();
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
@Override
|
|
98
|
+
public boolean onTouchEvent(MotionEvent e) {
|
|
99
|
+
if (!isEnableScroll) {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
return super.onTouchEvent(e);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* 刷新数据
|
|
107
|
+
*/
|
|
108
|
+
public void setListData() {
|
|
109
|
+
LogUtils.d("HippyRecyclerView", "itemCount =" + listAdapter.getItemCount());
|
|
110
|
+
listAdapter.notifyDataSetChanged();
|
|
111
|
+
//notifyDataSetChanged 本身是可以触发requestLayout的,但是Hippy框架下 HippyRootView 已经把
|
|
112
|
+
//onLayout方法重载写成空方法,requestLayout不会回调孩子节点的onLayout,这里需要自己发起dispatchLayout
|
|
113
|
+
renderNodeCount = getAdapter().getRenderNodeCount();
|
|
114
|
+
dispatchLayout();
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* 内容偏移,返回recyclerView顶部被滑出去的内容 1、找到顶部第一个View前面的逻辑内容高度 2、加上第一个View被遮住的区域
|
|
119
|
+
*/
|
|
120
|
+
public int getContentOffsetY() {
|
|
121
|
+
return computeVerticalScrollOffset();
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* 内容偏移,返回recyclerView被滑出去的内容 1、找到顶部第一个View前面的逻辑内容宽度 2、加上第一个View被遮住的区域
|
|
126
|
+
*/
|
|
127
|
+
public int getContentOffsetX() {
|
|
128
|
+
int firstChildPosition = getFirstChildPosition();
|
|
129
|
+
int totalWidthBeforePosition = getTotalWithBefore(firstChildPosition);
|
|
130
|
+
int firstChildOffset =
|
|
131
|
+
listAdapter.getItemWidth(firstChildPosition) - getVisibleWidth(getChildAt(0));
|
|
132
|
+
return totalWidthBeforePosition + firstChildOffset;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* 获取一个View的可视高度,并非view本身的height,有可能部分是被滑出到屏幕外部
|
|
137
|
+
*/
|
|
138
|
+
protected int getVisibleHeight(View firstChildView) {
|
|
139
|
+
return getViewVisibleRect(firstChildView).height();
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* 获取一个View的可视高度,并非view本身的height,有可能部分是被滑出到屏幕外部
|
|
144
|
+
*/
|
|
145
|
+
protected int getVisibleWidth(View firstChildView) {
|
|
146
|
+
return getViewVisibleRect(firstChildView).width();
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* 获取view在父亲中的可视区域
|
|
151
|
+
*/
|
|
152
|
+
private Rect getViewVisibleRect(View view) {
|
|
153
|
+
Rect rect = new Rect();
|
|
154
|
+
if (view != null) {
|
|
155
|
+
view.getLocalVisibleRect(rect);
|
|
156
|
+
}
|
|
157
|
+
return rect;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* 获取position 前面的内容高度,不包含position自身的高度
|
|
162
|
+
*/
|
|
163
|
+
public int getTotalHeightBefore(int position) {
|
|
164
|
+
int totalHeightBefore = 0;
|
|
165
|
+
for (int i = 0; i < position; i++) {
|
|
166
|
+
totalHeightBefore += listAdapter.getItemHeight(i);
|
|
167
|
+
}
|
|
168
|
+
return totalHeightBefore;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* 获取renderNodePosition前面的内容高度,不包含renderNodePosition自身的高度
|
|
173
|
+
*/
|
|
174
|
+
public int getRenderNodeHeightBefore(int renderNodePosition) {
|
|
175
|
+
int renderNodeTotalHeight = 0;
|
|
176
|
+
for (int i = 0; i < renderNodePosition; i++) {
|
|
177
|
+
renderNodeTotalHeight += listAdapter.getRenderNodeHeight(i);
|
|
178
|
+
}
|
|
179
|
+
return renderNodeTotalHeight;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* 获取position 前面的内容高度,不包含position自身的高度
|
|
185
|
+
*/
|
|
186
|
+
public int getTotalWithBefore(int position) {
|
|
187
|
+
int totalWidthBefore = 0;
|
|
188
|
+
for (int i = 0; i < position; i++) {
|
|
189
|
+
totalWidthBefore += listAdapter.getItemWidth(i);
|
|
190
|
+
}
|
|
191
|
+
return totalWidthBefore;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
public RecyclerViewEventHelper getRecyclerViewEventHelper() {
|
|
195
|
+
return intEventHelper();
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
private RecyclerViewEventHelper intEventHelper() {
|
|
199
|
+
if (recyclerViewEventHelper == null) {
|
|
200
|
+
recyclerViewEventHelper = createEventHelper();
|
|
201
|
+
}
|
|
202
|
+
return recyclerViewEventHelper;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
protected RecyclerViewEventHelper createEventHelper() {
|
|
206
|
+
return new RecyclerViewEventHelper(this);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* 设置recyclerView可以滚动
|
|
211
|
+
*/
|
|
212
|
+
public void setScrollEnable(boolean enable) {
|
|
213
|
+
isEnableScroll = enable;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
public int getNodePositionInAdapter(int position) {
|
|
217
|
+
return position;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
public void scrollToIndex(int xIndex, int yPosition, boolean animated, int duration) {
|
|
221
|
+
int positionInAdapter = getNodePositionInAdapter(yPosition);
|
|
222
|
+
if (animated) {
|
|
223
|
+
doSmoothScrollY(duration, getTotalHeightBefore(positionInAdapter) - getContentOffsetY());
|
|
224
|
+
postDispatchLayout();
|
|
225
|
+
} else {
|
|
226
|
+
scrollToPositionWithOffset(positionInAdapter, 0);
|
|
227
|
+
//不能调用postDispatchLayout,需要立即调研dispatchLayout,否则滚动位置不对
|
|
228
|
+
dispatchLayout();
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* @param xOffset 暂不支持
|
|
234
|
+
* @param yOffset yOffset>0 内容向上移动,yOffset<0, 内容向下移动
|
|
235
|
+
* @param animated 是否有动画
|
|
236
|
+
* @param duration 动画的时间
|
|
237
|
+
*/
|
|
238
|
+
public void scrollToContentOffset(double xOffset, double yOffset, boolean animated,
|
|
239
|
+
int duration) {
|
|
240
|
+
if (!canScrollToContentOffset()) {
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
int yOffsetInPixel = (int) PixelUtil.dp2px(yOffset);
|
|
244
|
+
int deltaY = yOffsetInPixel - getContentOffsetY();
|
|
245
|
+
//增加异常保护
|
|
246
|
+
if (animated) {
|
|
247
|
+
doSmoothScrollY(duration, deltaY);
|
|
248
|
+
} else {
|
|
249
|
+
scrollBy(0, deltaY);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* renderNodeCount是在setListData的时候更新,必须调用setListData后,确保renderNodeCount和
|
|
255
|
+
* getAdapter().getRenderNodeCount()的值相等,才能进行滚动,否则scrollBy会出现IndexOutOfBoundsException
|
|
256
|
+
* 的问题,主要原因就是RecyclerView的内部状态没有通过setListData进行刷新,还是老的数据
|
|
257
|
+
* RenderManager的batch方法应该把dispatchUIFunction放到batchComplete后面,但是这样改动太大
|
|
258
|
+
*
|
|
259
|
+
* @return
|
|
260
|
+
*/
|
|
261
|
+
private boolean canScrollToContentOffset() {
|
|
262
|
+
return renderNodeCount == getAdapter().getRenderNodeCount();
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
private void doSmoothScrollY(int duration, int scrollToYPos) {
|
|
266
|
+
if (duration != 0) {
|
|
267
|
+
if (scrollToYPos != 0 && !didStructureChange()) {
|
|
268
|
+
// smoothScrollBy(0, scrollToYPos, null, duration);
|
|
269
|
+
//FIXME 这里由于改成supportV4 导致duration不支持
|
|
270
|
+
smoothScrollBy(0, scrollToYPos);
|
|
271
|
+
postDispatchLayout();
|
|
272
|
+
}
|
|
273
|
+
} else {
|
|
274
|
+
//smoothScrollBy(0, scrollToYPos);
|
|
275
|
+
scrollBy(0,scrollToYPos);
|
|
276
|
+
postDispatchLayout();
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
private void postDispatchLayout() {
|
|
281
|
+
post(new Runnable() {
|
|
282
|
+
@Override
|
|
283
|
+
public void run() {
|
|
284
|
+
dispatchLayout();
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
public void scrollToTop() {
|
|
290
|
+
LayoutManager layoutManager = getLayoutManager();
|
|
291
|
+
if (layoutManager.canScrollHorizontally()) {
|
|
292
|
+
smoothScrollBy(-getContentOffsetX(), 0);
|
|
293
|
+
} else {
|
|
294
|
+
smoothScrollBy(0, -getContentOffsetY());
|
|
295
|
+
}
|
|
296
|
+
postDispatchLayout();
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* @param enable true :支持Item 上滑吸顶功能
|
|
301
|
+
*/
|
|
302
|
+
public void setRowShouldSticky(boolean enable) {
|
|
303
|
+
if (enable) {
|
|
304
|
+
if (stickyHeaderHelper == null) {
|
|
305
|
+
stickyHeaderHelper = new StickyHeaderHelper(this, listAdapter, this, headerHost);
|
|
306
|
+
addOnScrollListener(stickyHeaderHelper);
|
|
307
|
+
}
|
|
308
|
+
} else {
|
|
309
|
+
if (stickyHeaderHelper != null) {
|
|
310
|
+
removeOnScrollListener(stickyHeaderHelper);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
/**
|
|
316
|
+
* 同步删除RenderNode对应注册的View,deleteChild是递归删除RenderNode创建的所有的view
|
|
317
|
+
*/
|
|
318
|
+
@Override
|
|
319
|
+
public void onViewAbound(HippyRecyclerViewHolder viewHolder) {
|
|
320
|
+
if (viewHolder.bindNode != null && !viewHolder.bindNode.isDelete()) {
|
|
321
|
+
getAdapter().deleteExistRenderView(viewHolder.bindNode);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
/**
|
|
326
|
+
* 当header被摘下来,需要对header进行还原或者回收对处理 遍历所有都ViewHolder,看看有没有收纳这个headerView都ViewHolder
|
|
327
|
+
* 如果没有,需要把aboundHeader进行回收,并同步删除render节点对应都view
|
|
328
|
+
*
|
|
329
|
+
* @param aboundHeader HeaderView对应的Holder
|
|
330
|
+
* @param currentHeaderView headerView的实体内容
|
|
331
|
+
*/
|
|
332
|
+
@Override
|
|
333
|
+
public void onHeaderDetached(ViewHolder aboundHeader, View currentHeaderView) {
|
|
334
|
+
boolean findHostViewHolder = false;
|
|
335
|
+
for (int i = 0; i < getChildCountWithCaches(); i++) {
|
|
336
|
+
ViewHolder viewHolder = getChildViewHolder(getChildAtWithCaches(i));
|
|
337
|
+
if (isTheSameRenderNode((HippyRecyclerViewHolder) aboundHeader,
|
|
338
|
+
(HippyRecyclerViewHolder) viewHolder)) {
|
|
339
|
+
findHostViewHolder = true;
|
|
340
|
+
fillContentView(currentHeaderView, viewHolder);
|
|
341
|
+
break;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
//当header无处安放,抛弃view都同时,需要同步给Hippy进行View都删除,不然后续无法创建对应都View
|
|
345
|
+
if (!findHostViewHolder) {
|
|
346
|
+
onViewAbound((HippyRecyclerViewHolder) aboundHeader);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
private boolean fillContentView(View currentHeaderView, ViewHolder viewHolder) {
|
|
351
|
+
if (viewHolder != null && viewHolder.itemView instanceof ViewGroup) {
|
|
352
|
+
ViewGroup itemView = (ViewGroup) viewHolder.itemView;
|
|
353
|
+
if (itemView.getChildCount() <= 0) {
|
|
354
|
+
itemView.addView(currentHeaderView);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
return false;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
private boolean isTheSameRenderNode(HippyRecyclerViewHolder aboundHeader,
|
|
361
|
+
HippyRecyclerViewHolder viewHolder) {
|
|
362
|
+
if (viewHolder.bindNode != null && aboundHeader.bindNode != null) {
|
|
363
|
+
return viewHolder.bindNode.getId() == aboundHeader.bindNode.getId();
|
|
364
|
+
}
|
|
365
|
+
return false;
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
public void setNodePositionHelper(NodePositionHelper nodePositionHelper) {
|
|
369
|
+
this.nodePositionHelper = nodePositionHelper;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
@Override
|
|
373
|
+
public String toString() {
|
|
374
|
+
return this.getClass().getSimpleName() + "{renderNodeCount:" + renderNodeCount + ",state:"
|
|
375
|
+
+ getStateInfo()
|
|
376
|
+
+ "}";
|
|
377
|
+
}
|
|
378
|
+
}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/* Tencent is pleased to support the open source community by making Hippy available.
|
|
2
|
+
* Copyright (C) 2018 THL A29 Limited, a Tencent company. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
package com.tencent.mtt.hippy.views.hippylist;
|
|
18
|
+
|
|
19
|
+
import android.content.Context;
|
|
20
|
+
import android.support.v7.widget.EasyLinearLayoutManager;
|
|
21
|
+
import android.support.v7.widget.LinearLayoutManager;
|
|
22
|
+
import android.view.View;
|
|
23
|
+
import com.tencent.mtt.hippy.HippyInstanceContext;
|
|
24
|
+
import com.tencent.mtt.hippy.HippyRootView;
|
|
25
|
+
import com.tencent.mtt.hippy.annotation.HippyController;
|
|
26
|
+
import com.tencent.mtt.hippy.annotation.HippyControllerProps;
|
|
27
|
+
import com.tencent.mtt.hippy.common.HippyArray;
|
|
28
|
+
import com.tencent.mtt.hippy.common.HippyMap;
|
|
29
|
+
import com.tencent.mtt.hippy.uimanager.ControllerManager;
|
|
30
|
+
import com.tencent.mtt.hippy.uimanager.HippyViewController;
|
|
31
|
+
import com.tencent.mtt.hippy.uimanager.ListViewRenderNode;
|
|
32
|
+
import com.tencent.mtt.hippy.uimanager.RenderNode;
|
|
33
|
+
|
|
34
|
+
@HippyController(name = HippyRecyclerViewController.CLASS_NAME)
|
|
35
|
+
public class HippyRecyclerViewController<HRW extends HippyRecyclerViewWrapper> extends
|
|
36
|
+
HippyViewController<HRW> {
|
|
37
|
+
|
|
38
|
+
public static final String CLASS_NAME = "RecyclerView";
|
|
39
|
+
public static final String SCROLL_TO_INDEX = "scrollToIndex";
|
|
40
|
+
public static final String SCROLL_TO_CONTENT_OFFSET = "scrollToContentOffset";
|
|
41
|
+
public static final String SCROLL_TO_TOP = "scrollToTop";
|
|
42
|
+
public static final String COLLAPSE_PULL_HEADER = "collapsePullHeader";
|
|
43
|
+
public static final String EXPAND_PULL_HEADER = "expandPullHeader";
|
|
44
|
+
|
|
45
|
+
public HippyRecyclerViewController() {
|
|
46
|
+
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@Override
|
|
50
|
+
public int getChildCount(HRW viewGroup) {
|
|
51
|
+
return viewGroup.getChildCountWithCaches();
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
@Override
|
|
55
|
+
public View getChildAt(HRW viewGroup, int index) {
|
|
56
|
+
return viewGroup.getChildAtWithCaches(index);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
@Override
|
|
60
|
+
public void onBatchComplete(HRW view) {
|
|
61
|
+
super.onBatchComplete(view);
|
|
62
|
+
view.setListData();
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
@Override
|
|
66
|
+
protected View createViewImpl(Context context) {
|
|
67
|
+
return createViewImpl(context, null);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
@Override
|
|
71
|
+
protected View createViewImpl(Context context, HippyMap iniProps) {
|
|
72
|
+
return new HippyRecyclerViewWrapper(context,
|
|
73
|
+
initDefault(context, iniProps, new HippyRecyclerView(context)));
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
public static HippyRecyclerView initDefault(Context context, HippyMap iniProps,
|
|
77
|
+
HippyRecyclerView recyclerView) {
|
|
78
|
+
LinearLayoutManager layoutManager = new EasyLinearLayoutManager(context);
|
|
79
|
+
recyclerView.setItemAnimator(null);
|
|
80
|
+
if (iniProps != null && iniProps.containsKey("horizontal")) {
|
|
81
|
+
layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
|
|
82
|
+
}
|
|
83
|
+
recyclerView.setLayoutManager(layoutManager);
|
|
84
|
+
recyclerView.setHippyEngineContext(((HippyInstanceContext) context).getEngineContext());
|
|
85
|
+
recyclerView.initRecyclerView();
|
|
86
|
+
return recyclerView;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
@Override
|
|
90
|
+
public RenderNode createRenderNode(int id, HippyMap props, String className,
|
|
91
|
+
HippyRootView hippyRootView,
|
|
92
|
+
ControllerManager controllerManager,
|
|
93
|
+
boolean lazy) {
|
|
94
|
+
return new ListViewRenderNode(id, props, className, hippyRootView, controllerManager, lazy);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
@HippyControllerProps(name = "rowShouldSticky")
|
|
98
|
+
public void setRowShouldSticky(HRW view, boolean enable) {
|
|
99
|
+
view.setRowShouldSticky(enable);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
@HippyControllerProps(name = "onScrollBeginDrag", defaultType = HippyControllerProps.BOOLEAN, defaultBoolean = false)
|
|
103
|
+
public void setScrollBeginDragEventEnable(HRW view, boolean flag) {
|
|
104
|
+
view.getRecyclerViewEventHelper().setScrollBeginDragEventEnable(flag);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
@HippyControllerProps(name = "onScrollEndDrag", defaultType = HippyControllerProps.BOOLEAN, defaultBoolean = false)
|
|
108
|
+
public void setScrollEndDragEventEnable(HRW view, boolean flag) {
|
|
109
|
+
view.getRecyclerViewEventHelper().setScrollEndDragEventEnable(flag);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
@HippyControllerProps(name = "onMomentumScrollBegin", defaultType = HippyControllerProps.BOOLEAN, defaultBoolean = false)
|
|
113
|
+
public void setMomentumScrollBeginEventEnable(HRW view, boolean flag) {
|
|
114
|
+
view.getRecyclerViewEventHelper().setMomentumScrollBeginEventEnable(flag);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
@HippyControllerProps(name = "onMomentumScrollEnd", defaultType = HippyControllerProps.BOOLEAN, defaultBoolean = false)
|
|
118
|
+
public void setMomentumScrollEndEventEnable(HRW view, boolean flag) {
|
|
119
|
+
view.getRecyclerViewEventHelper().setMomentumScrollEndEventEnable(flag);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
@HippyControllerProps(name = "onScrollEnable", defaultType = HippyControllerProps.BOOLEAN, defaultBoolean = false)
|
|
123
|
+
public void setOnScrollEventEnable(HRW view, boolean flag) {
|
|
124
|
+
view.getRecyclerViewEventHelper().setOnScrollEventEnable(flag);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
@HippyControllerProps(name = "exposureEventEnabled", defaultType = HippyControllerProps.BOOLEAN, defaultBoolean = false)
|
|
128
|
+
public void setExposureEventEnable(HRW view, boolean flag) {
|
|
129
|
+
view.getRecyclerViewEventHelper().setExposureEventEnable(flag);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
@HippyControllerProps(name = "scrollEnabled", defaultType = HippyControllerProps.BOOLEAN, defaultBoolean = true)
|
|
133
|
+
public void setScrollEnable(HRW view, boolean flag) {
|
|
134
|
+
view.setScrollEnable(flag);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
@HippyControllerProps(name = "scrollEventThrottle", defaultType = HippyControllerProps.NUMBER, defaultNumber = 30.0D)
|
|
138
|
+
public void setscrollEventThrottle(HRW view, int scrollEventThrottle) {
|
|
139
|
+
view.getRecyclerViewEventHelper().setScrollEventThrottle(scrollEventThrottle);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
@HippyControllerProps(name = "preloadItemNumber")
|
|
143
|
+
public void setPreloadItemNumber(HRW view, int preloadItemNumber) {
|
|
144
|
+
getAdapter(view).setPreloadItemNumber(preloadItemNumber);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
@Override
|
|
148
|
+
public void dispatchFunction(HRW view, String functionName, HippyArray dataArray) {
|
|
149
|
+
super.dispatchFunction(view, functionName, dataArray);
|
|
150
|
+
switch (functionName) {
|
|
151
|
+
case SCROLL_TO_INDEX: {
|
|
152
|
+
// list滑动到某个item
|
|
153
|
+
int xIndex = dataArray.getInt(0);
|
|
154
|
+
int yIndex = dataArray.getInt(1);
|
|
155
|
+
boolean animated = dataArray.getBoolean(2);
|
|
156
|
+
int duration = dataArray.getInt(3); //1.2.7 增加滚动时间 ms,animated==true时生效
|
|
157
|
+
view.scrollToIndex(xIndex, yIndex, animated, duration);
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
case SCROLL_TO_CONTENT_OFFSET: {
|
|
161
|
+
// list滑动到某个距离
|
|
162
|
+
double xOffset = dataArray.getDouble(0);
|
|
163
|
+
double yOffset = dataArray.getDouble(1);
|
|
164
|
+
boolean animated = dataArray.getBoolean(2);
|
|
165
|
+
int duration = dataArray.getInt(3); //1.2.7 增加滚动时间 ms,animated==true时生效
|
|
166
|
+
view.scrollToContentOffset(xOffset, yOffset, animated, duration);
|
|
167
|
+
break;
|
|
168
|
+
}
|
|
169
|
+
case SCROLL_TO_TOP: {
|
|
170
|
+
view.scrollToTop();
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
case COLLAPSE_PULL_HEADER: {
|
|
174
|
+
getAdapter(view).getHeaderEventHelper().onHeaderRefreshFinish();
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
177
|
+
case EXPAND_PULL_HEADER: {
|
|
178
|
+
getAdapter(view).getHeaderEventHelper().onHeaderRefresh();
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
private HippyRecyclerListAdapter getAdapter(HRW view) {
|
|
185
|
+
return view.getRecyclerView().getAdapter();
|
|
186
|
+
}
|
|
187
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/* Tencent is pleased to support the open source community by making Hippy available.
|
|
2
|
+
* Copyright (C) 2018 THL A29 Limited, a Tencent company. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
package com.tencent.mtt.hippy.views.hippylist;
|
|
18
|
+
|
|
19
|
+
import android.support.annotation.NonNull;
|
|
20
|
+
import android.support.v7.widget.RecyclerView.ViewHolder;
|
|
21
|
+
import android.view.View;
|
|
22
|
+
import com.tencent.mtt.hippy.uimanager.ListItemRenderNode;
|
|
23
|
+
|
|
24
|
+
public class HippyRecyclerViewHolder extends ViewHolder {
|
|
25
|
+
|
|
26
|
+
public ListItemRenderNode bindNode;
|
|
27
|
+
|
|
28
|
+
public HippyRecyclerViewHolder(@NonNull View itemView, ListItemRenderNode renderNode) {
|
|
29
|
+
super(itemView);
|
|
30
|
+
bindNode = renderNode;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
public boolean isRenderDeleted() {
|
|
34
|
+
if (bindNode != null) {
|
|
35
|
+
return bindNode.isDelete();
|
|
36
|
+
}
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
}
|