diff --git a/README-ch.md b/README-ch.md
index 6d54003d..ae4005ca 100644
--- a/README-ch.md
+++ b/README-ch.md
@@ -1,3 +1,5 @@
+# 注意,该项目停止维护!!!
+
# vlayout
[English Document](README.md)
@@ -21,7 +23,7 @@ VirtualLayout是一个针对RecyclerView的LayoutManager扩展, 主要提供一
## 设计思路
-通过定制化的LayoutManager,接管整个RecyclerView的布局逻辑;LayoutManager管理了一系列LayoutHelper,LayoutHelper负责具体布局逻辑实现的地方;每一个LayoutHelper负责页面某一个范围内的组件布局;不同的LayoutHelper可以做不同的布局逻辑,因此可以在一个RecyclerView页面里提供异构的布局结构,这就能比系统自带的LinearLayoutManager、aridLayoutManager等提供更加丰富的能力。同时支持扩展LayoutHelper来提供更多的布局能力。
+通过定制化的LayoutManager,接管整个RecyclerView的布局逻辑;LayoutManager管理了一系列LayoutHelper,LayoutHelper负责具体布局逻辑实现的地方;每一个LayoutHelper负责页面某一个范围内的组件布局;不同的LayoutHelper可以做不同的布局逻辑,因此可以在一个RecyclerView页面里提供异构的布局结构,这就能比系统自带的LinearLayoutManager、GridLayoutManager等提供更加丰富的能力。同时支持扩展LayoutHelper来提供更多的布局能力。
## 主要功能
@@ -42,10 +44,12 @@ VirtualLayout是一个针对RecyclerView的LayoutManager扩展, 主要提供一
## 使用
-版本请参考mvn repository上的最新版本(目前最新版本是1.2.6),最新的 aar 都会发布到 jcenter 和 MavenCentral 上,确保配置了这两个仓库源,然后引入aar依赖:
+**虽然 vlayout 布局灵活,然而 API 相对原始,手工维护数据及 LayoutHelper 比较麻烦,强烈建议大家使用 [Tangram-Android](https://github.com/alibaba/Tangram-Android) 来间接使用 vlayout,Tangram 具备 vlayout 里所有的功能,且隐藏了细节,通过数据配置即可搭建页面,能避免绝大多数 Issue 里提到的问题,而且重大更新维护主要基于 Tangram,包括局部刷新、响应式接口等。**
+
+版本请参考 [release 说明](https://github.com/alibaba/vlayout/releases)里的最新版本,最新的 aar 都会发布到 jcenter 和 MavenCentral 上,确保配置了这两个仓库源,然后引入aar依赖:
``` gradle
-compile ('com.alibaba.android:vlayout:1.2.6@aar') {
+compile ('com.alibaba.android:vlayout:1.2.8@aar') {
transitive = true
}
```
@@ -56,7 +60,7 @@ pom.xml
com.alibaba.android
vlayout
- 1.2.6
+ 1.2.8
aar
```
diff --git a/README.md b/README.md
index 9f6450eb..28252a0a 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,5 @@
+# Attention. This project is not maintained any more !!!
+
# vlayout
[中文文档](README-ch.md)
@@ -42,11 +44,11 @@ By providing a custom LayoutManager to RecyclerView, VirtualLayout is able to la
### Import Library
-Please find the latest version(1.2.6 so far) in maven repository. The newest version has been upload to jcenter and MavenCentral, make sure you have added at least one of these repositories.
+Please find the latest version in [release notes](https://github.com/alibaba/vlayout/releases). The newest version has been upload to jcenter and MavenCentral, make sure you have added at least one of these repositories. As follow:
For gradle:
``` gradle
-compile ('com.alibaba.android:vlayout:1.2.6@aar') {
+compile ('com.alibaba.android:vlayout:1.2.8@aar') {
transitive = true
}
```
@@ -57,7 +59,7 @@ pom.xml
com.alibaba.android
vlayout
- 1.2.6
+ 1.2.8
aar
```
diff --git a/docs/VLayoutFAQ.md b/docs/VLayoutFAQ.md
index fbbe4e1b..d4028eef 100644
--- a/docs/VLayoutFAQ.md
+++ b/docs/VLayoutFAQ.md
@@ -13,7 +13,7 @@
因此如果没有处理好这一点,会导致 `ViewHolder` 的类型转换异常等 bug。有一篇更加详细的资料可参考:[PairFunction](http://pingguohe.net/2017/05/03/the-beauty-of-math-in-vlayout.html)
-补充:后来发现一个 bug,当 `hasConsistItemType=true`,在同一位置数据变化,前后构造了不一样的 Adapter,它们返回的 itemType 一样,也会导致类型转换出错,详见:[#182](https://github.com/alibaba/vlayout/issues/182),目前采用人工保证返回不同的 itemType 来规避。
+补充:后来发现一个 bug,当 `hasConsistItemType=false`,在同一位置数据变化,前后构造了不一样的 Adapter,它们返回的 itemType 一样,也会导致类型转换出错,详见:[#182](https://github.com/alibaba/vlayout/issues/182),目前采用人工保证返回不同的 itemType 来规避。
## 设置每种类型回收复用池的大小
在 README 里写了这么一段 demo:`viewPool.setMaxRecycledViews(0, 10);`,很多人误以为只要这么设置就可以了,实际上有多少种类型的 itemType,就得为它们分别设置复用池大小。比如:
@@ -121,3 +121,94 @@ layoutHelper 根据 item 元素的位置和大小确定整块背景的大小,
## 判断 `StickyLayoutHelper` 里的 item 是否到达顶部
通过 `virtualLayoutManager.findFirstVisibleItemPosition()`,如果大于 `StickyLayoutHelper` 里的 item 的位置,说明已经到顶部。[#277](https://github.com/alibaba/vlayout/issues/277)
+
+## 滚动到某个 item 位置,并带偏移一个距离
+有时候自带的 scrollToPosition 方法或者 smoothScrollToPosition 方法不满足需求,可以尝试自己用动画驱动做一个滚动,下面是一种参考实现,可以基于此调整动画参数;
+
+```
+public class RecyclerViewFlinger implements Runnable {
+
+ private static final String TAG = "Flinger";
+
+ private static final float MILLISECONDS_PER_INCH = 25.0F;
+
+ private RecyclerView mRecyclerView;
+
+ private int targetPosition;
+
+ private int offset;
+
+ private int direction = 1;
+
+ private ScrollFinishedListener mFinishedListener;
+
+ private int lastTop;
+
+ private int step;
+
+ public RecyclerViewFlinger(RecyclerView recyclerView, int targetPosition, int offset,
+ ScrollFinishedListener finishedListener) {
+ this.mRecyclerView = recyclerView;
+ this.targetPosition = targetPosition; //targetPosition 目标item的位置
+ this.offset = offset;//offset 是目标 item 距离顶部的偏移量
+ this.mFinishedListener = finishedListener;//可以设置一个滚动回调
+ if (mRecyclerView != null) {
+ int firstVisibleItemPosition = mRecyclerView.getFirstVisiblePosition();
+ direction = firstVisibleItemPosition < targetPosition ? 1 : -1;
+ }
+ this.step = mRecyclerView.getMeasuredHeight() / 2; //滚动步长,时间等都可以细调
+ }
+
+ @Override
+ public void run() {
+ if (mRecyclerView != null) {
+ int firstVisibleItemPosition = mRecyclerView.getFirstVisiblePosition();
+ int lastVisibleItemPosition = mRecyclerView.getLastVisiblePosition();
+ boolean inscreen = targetPosition >= firstVisibleItemPosition && targetPosition <= lastVisibleItemPosition;
+ if (inscreen) {
+ View targetView = mRecyclerView.getLayoutManager().findViewByPosition(targetPosition);
+ if (targetView != null) {
+ int top = targetView.getTop();
+ int dy = top - offset;
+ mRecyclerView.smoothScrollBy(0, dy);
+ if (lastTop == top) {
+ if (mFinishedListener != null) {
+ mFinishedListener.onPostExecute(targetView);
+ }
+ } else {
+ lastTop = top;
+ postOnAnimation();
+ }
+ }
+ } else {
+ mRecyclerView.smoothScrollBy(0, step * direction);
+ postOnAnimation();
+ }
+
+ }
+ }
+
+ public void postOnAnimation() {
+ if (mRecyclerView == null) {
+ return;
+ }
+ ViewCompat.postOnAnimation(mRecyclerView, this);
+ }
+
+ public void stop() {
+ mFinishedListener = null;
+ if (mRecyclerView == null) {
+ return;
+ }
+ mRecyclerView.removeCallbacks(this);
+ }
+
+ public interface ScrollFinishedListener {
+ void onPostExecute(View view);
+ }
+
+}
+```
+
+
+
diff --git a/examples/src/main/java/com/alibaba/android/vlayout/example/VLayoutActivity.java b/examples/src/main/java/com/alibaba/android/vlayout/example/VLayoutActivity.java
index c6f49441..daeb7975 100644
--- a/examples/src/main/java/com/alibaba/android/vlayout/example/VLayoutActivity.java
+++ b/examples/src/main/java/com/alibaba/android/vlayout/example/VLayoutActivity.java
@@ -29,6 +29,9 @@
import com.alibaba.android.vlayout.RecyclablePagerAdapter;
import com.alibaba.android.vlayout.VirtualLayoutManager;
import com.alibaba.android.vlayout.VirtualLayoutManager.LayoutParams;
+import com.alibaba.android.vlayout.extend.LayoutManagerCanScrollListener;
+import com.alibaba.android.vlayout.extend.PerformanceMonitor;
+import com.alibaba.android.vlayout.extend.ViewLifeCycleListener;
import com.alibaba.android.vlayout.layout.ColumnLayoutHelper;
import com.alibaba.android.vlayout.layout.FixLayoutHelper;
import com.alibaba.android.vlayout.layout.FloatLayoutHelper;
@@ -109,8 +112,8 @@ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
- mSwipeRefreshLayout = (SwipeRefreshLayout)findViewById(R.id.swipe_container);
-;
+ mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_container);
+ ;
mFirstText = (TextView) findViewById(R.id.first);
mLastText = (TextView) findViewById(R.id.last);
mCountText = (TextView) findViewById(R.id.count);
@@ -119,7 +122,22 @@ protected void onCreate(Bundle savedInstanceState) {
final RecyclerView recyclerView = (RecyclerView) findViewById(R.id.main_view);
final VirtualLayoutManager layoutManager = new VirtualLayoutManager(this);
+ layoutManager.setPerformanceMonitor(new PerformanceMonitor() {
+ long start;
+ long end;
+
+ @Override
+ public void recordStart(String phase, View view) {
+ start = System.currentTimeMillis();
+ }
+
+ @Override
+ public void recordEnd(String phase, View view) {
+ end = System.currentTimeMillis();
+ Log.d("VLayoutActivity", view.getClass().getName() + " " + (end - start));
+ }
+ });
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int scrollState) {
@@ -135,8 +153,6 @@ public void onScrolled(RecyclerView recyclerView, int i, int i2) {
}
});
- layoutManager.setRecycleOffset(300);
-
recyclerView.setLayoutManager(layoutManager);
// layoutManager.setReverseLayout(true);
@@ -157,6 +173,45 @@ public void getItemOffsets(Rect outRect, View view, RecyclerView parent, Recycle
viewPool.setMaxRecycledViews(0, 20);
+ layoutManager.setRecycleOffset(300);
+
+ // viewLifeCycleListener should be used with setRecycleOffset()
+ layoutManager.setViewLifeCycleListener(new ViewLifeCycleListener() {
+ @Override
+ public void onAppearing(View view) {
+// Log.e("ViewLifeCycleTest", "onAppearing: " + view);
+ }
+
+ @Override
+ public void onDisappearing(View view) {
+// Log.e("ViewLifeCycleTest", "onDisappearing: " + view);
+ }
+
+ @Override
+ public void onAppeared(View view) {
+// Log.e("ViewLifeCycleTest", "onAppeared: " + view);
+ }
+
+ @Override
+ public void onDisappeared(View view) {
+// Log.e("ViewLifeCycleTest", "onDisappeared: " + view);
+ }
+ });
+
+ layoutManager.setLayoutManagerCanScrollListener(new LayoutManagerCanScrollListener() {
+ @Override
+ public boolean canScrollVertically() {
+ Log.i("vlayout", "canScrollVertically: ");
+ return true;
+ }
+
+ @Override
+ public boolean canScrollHorizontally() {
+ Log.i("vlayout", "canScrollHorizontally: ");
+ return true;
+ }
+ });
+
final DelegateAdapter delegateAdapter = new DelegateAdapter(layoutManager, true);
recyclerView.setAdapter(delegateAdapter);
@@ -264,82 +319,82 @@ public void onBindViewHolder(MainViewHolder holder, int position) {
});
}
- {
- RangeGridLayoutHelper layoutHelper = new RangeGridLayoutHelper(4);
- layoutHelper.setBgColor(Color.GREEN);
- layoutHelper.setWeights(new float[]{20f, 26.665f});
- layoutHelper.setPadding(15, 15, 15, 15);
- layoutHelper.setMargin(15, 50, 15, 150);
- layoutHelper.setHGap(10);
- layoutHelper.setVGap(10);
- GridRangeStyle rangeStyle = new GridRangeStyle();
- rangeStyle.setBgColor(Color.RED);
- rangeStyle.setSpanCount(2);
- rangeStyle.setWeights(new float[]{46.665f});
- rangeStyle.setPadding(15, 15, 15, 15);
- rangeStyle.setMargin(15, 15, 15, 15);
- rangeStyle.setHGap(5);
- rangeStyle.setVGap(5);
- layoutHelper.addRangeStyle(0, 7, rangeStyle);
+// {
+// RangeGridLayoutHelper layoutHelper = new RangeGridLayoutHelper(4);
+// layoutHelper.setBgColor(Color.GREEN);
+// layoutHelper.setWeights(new float[]{20f, 26.665f});
+// layoutHelper.setPadding(15, 15, 15, 15);
+// layoutHelper.setMargin(15, 50, 15, 150);
+// layoutHelper.setHGap(10);
+// layoutHelper.setVGap(10);
+// GridRangeStyle rangeStyle = new GridRangeStyle();
+// rangeStyle.setBgColor(Color.RED);
+// rangeStyle.setSpanCount(2);
+// rangeStyle.setWeights(new float[]{46.665f});
+// rangeStyle.setPadding(15, 15, 15, 15);
+// rangeStyle.setMargin(15, 15, 15, 15);
+// rangeStyle.setHGap(5);
+// rangeStyle.setVGap(5);
+// layoutHelper.addRangeStyle(0, 7, rangeStyle);
+//
+// GridRangeStyle rangeStyle1 = new GridRangeStyle();
+// rangeStyle1.setBgColor(Color.YELLOW);
+// rangeStyle1.setSpanCount(2);
+// rangeStyle1.setWeights(new float[]{46.665f});
+// rangeStyle1.setPadding(15, 15, 15, 15);
+// rangeStyle1.setMargin(15, 15, 15, 15);
+// rangeStyle1.setHGap(5);
+// rangeStyle1.setVGap(5);
+// layoutHelper.addRangeStyle(8, 15, rangeStyle1);
+//
+// GridRangeStyle rangeStyle2 = new GridRangeStyle();
+// rangeStyle2.setBgColor(Color.CYAN);
+// rangeStyle2.setSpanCount(2);
+// rangeStyle2.setWeights(new float[]{46.665f});
+// rangeStyle2.setPadding(15, 15, 15, 15);
+// rangeStyle2.setMargin(15, 15, 15, 15);
+// rangeStyle2.setHGap(5);
+// rangeStyle2.setVGap(5);
+// layoutHelper.addRangeStyle(16, 22, rangeStyle2);
+// GridRangeStyle rangeStyle3 = new GridRangeStyle();
+// rangeStyle3.setBgColor(Color.DKGRAY);
+// rangeStyle3.setSpanCount(1);
+// rangeStyle3.setWeights(new float[]{46.665f});
+// rangeStyle3.setPadding(15, 15, 15, 15);
+// rangeStyle3.setMargin(15, 15, 15, 15);
+// rangeStyle3.setHGap(5);
+// rangeStyle3.setVGap(5);
+// rangeStyle2.addChildRangeStyle(0, 2, rangeStyle3);
+// GridRangeStyle rangeStyle4 = new GridRangeStyle();
+// rangeStyle4.setBgColor(Color.BLUE);
+// rangeStyle4.setSpanCount(2);
+// rangeStyle4.setWeights(new float[]{46.665f});
+// rangeStyle4.setPadding(15, 15, 15, 15);
+// rangeStyle4.setMargin(15, 15, 15, 15);
+// rangeStyle4.setHGap(5);
+// rangeStyle4.setVGap(5);
+// rangeStyle2.addChildRangeStyle(3, 6, rangeStyle4);
+//
+// GridRangeStyle rangeStyle5 = new GridRangeStyle();
+// rangeStyle5.setBgColor(Color.RED);
+// rangeStyle5.setSpanCount(2);
+// rangeStyle5.setPadding(15, 15, 15, 15);
+// rangeStyle5.setMargin(15, 15, 15, 15);
+// rangeStyle5.setHGap(5);
+// rangeStyle5.setVGap(5);
+// layoutHelper.addRangeStyle(23, 30, rangeStyle5);
+// GridRangeStyle rangeStyle6 = new GridRangeStyle();
+// rangeStyle6.setBgColor(Color.MAGENTA);
+// rangeStyle6.setSpanCount(2);
+// rangeStyle6.setPadding(15, 15, 15, 15);
+// rangeStyle6.setMargin(15, 15, 15, 15);
+// rangeStyle6.setHGap(5);
+// rangeStyle6.setVGap(5);
+// rangeStyle5.addChildRangeStyle(0, 7, rangeStyle6);
+//
+// adapters.add(new SubAdapter(this, layoutHelper, 23));
+// }
- GridRangeStyle rangeStyle1 = new GridRangeStyle();
- rangeStyle1.setBgColor(Color.YELLOW);
- rangeStyle1.setSpanCount(2);
- rangeStyle1.setWeights(new float[]{46.665f});
- rangeStyle1.setPadding(15, 15, 15, 15);
- rangeStyle1.setMargin(15, 15, 15, 15);
- rangeStyle1.setHGap(5);
- rangeStyle1.setVGap(5);
- layoutHelper.addRangeStyle(8, 15, rangeStyle1);
-
- GridRangeStyle rangeStyle2 = new GridRangeStyle();
- rangeStyle2.setBgColor(Color.CYAN);
- rangeStyle2.setSpanCount(2);
- rangeStyle2.setWeights(new float[]{46.665f});
- rangeStyle2.setPadding(15, 15, 15, 15);
- rangeStyle2.setMargin(15, 15, 15, 15);
- rangeStyle2.setHGap(5);
- rangeStyle2.setVGap(5);
- layoutHelper.addRangeStyle(16, 22, rangeStyle2);
- GridRangeStyle rangeStyle3 = new GridRangeStyle();
- rangeStyle3.setBgColor(Color.DKGRAY);
- rangeStyle3.setSpanCount(1);
- rangeStyle3.setWeights(new float[]{46.665f});
- rangeStyle3.setPadding(15, 15, 15, 15);
- rangeStyle3.setMargin(15, 15, 15, 15);
- rangeStyle3.setHGap(5);
- rangeStyle3.setVGap(5);
- rangeStyle2.addChildRangeStyle(0, 2, rangeStyle3);
- GridRangeStyle rangeStyle4 = new GridRangeStyle();
- rangeStyle4.setBgColor(Color.BLUE);
- rangeStyle4.setSpanCount(2);
- rangeStyle4.setWeights(new float[]{46.665f});
- rangeStyle4.setPadding(15, 15, 15, 15);
- rangeStyle4.setMargin(15, 15, 15, 15);
- rangeStyle4.setHGap(5);
- rangeStyle4.setVGap(5);
- rangeStyle2.addChildRangeStyle(3, 6, rangeStyle4);
-
- GridRangeStyle rangeStyle5 = new GridRangeStyle();
- rangeStyle5.setBgColor(Color.RED);
- rangeStyle5.setSpanCount(2);
- rangeStyle5.setPadding(15, 15, 15, 15);
- rangeStyle5.setMargin(15, 15, 15, 15);
- rangeStyle5.setHGap(5);
- rangeStyle5.setVGap(5);
- layoutHelper.addRangeStyle(23, 30, rangeStyle5);
- GridRangeStyle rangeStyle6 = new GridRangeStyle();
- rangeStyle6.setBgColor(Color.MAGENTA);
- rangeStyle6.setSpanCount(2);
- rangeStyle6.setPadding(15, 15, 15, 15);
- rangeStyle6.setMargin(15, 15, 15, 15);
- rangeStyle6.setHGap(5);
- rangeStyle6.setVGap(5);
- rangeStyle5.addChildRangeStyle(0, 7, rangeStyle6);
-
- adapters.add(new SubAdapter(this, layoutHelper, 23));
- }
-
{
SingleLayoutHelper layoutHelper = new SingleLayoutHelper();
layoutHelper.setBgColor(Color.BLUE);
@@ -616,7 +671,7 @@ public void onBindViewHolder(MainViewHolder holder, int position) {
}
adapters.add(
- new FooterAdapter(recyclerView, VLayoutActivity.this, new GridLayoutHelper(1), 1));
+ new FooterAdapter(recyclerView, VLayoutActivity.this, new GridLayoutHelper(1), 1));
delegateAdapter.setAdapters(adapters);
@@ -626,8 +681,8 @@ public void onBindViewHolder(MainViewHolder holder, int position) {
trigger = new Runnable() {
@Override
public void run() {
- //recyclerView.scrollToPosition(22);
- //recyclerView.getAdapter().notifyDataSetChanged();
+ //recyclerView.scrollToPosition(22);
+ //recyclerView.getAdapter().notifyDataSetChanged();
//mainHandler.postDelayed(trigger, 1000);
//List newAdapters = new ArrayList<>();
//newAdapters.add((new SubAdapter(VLayoutActivity.this, new ColumnLayoutHelper(), 3)));
@@ -658,7 +713,6 @@ public void onClick(View v) {
});
-
mainHandler.postDelayed(trigger, 1000);
mSwipeRefreshLayout.setOnRefreshListener(new OnRefreshListener() {
diff --git a/gradle.properties b/gradle.properties
index 13afc4cc..e2f89383 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -44,9 +44,9 @@
GROUP=com.alibaba.android
ARTIFACT=vlayout
VERSION=1
-VERSION_NAME=1.2.6
+VERSION_NAME=1.2.39
PACKAGING_TYPE=aar
useNewSupportLibrary=true
-systemProp.compileSdkVersion=23
-systemProp.targetSdkVersion=23
-systemProp.buildToolsVersion=23.0.2
\ No newline at end of file
+systemProp.compileSdkVersion=26
+systemProp.targetSdkVersion=26
+systemProp.buildToolsVersion=26.0.2
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index f783c8f2..3ca3e4e1 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -27,4 +27,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
diff --git a/jcenterDeploy.gradle b/jcenterDeploy.gradle
index fcb5618a..e1d7a7c1 100644
--- a/jcenterDeploy.gradle
+++ b/jcenterDeploy.gradle
@@ -86,14 +86,21 @@ artifacts {
}
// Bintray
-//Properties properties = new Properties()
-//properties.load(project.rootProject.file('local.properties').newDataInputStream())
+Properties properties = new Properties()
+File localProperties = project.rootProject.file('local.properties')
+if (localProperties.exists()) {
+ properties.load(project.rootProject.file('local.properties').newDataInputStream())
+}
bintray {
-// user = properties.getProperty("bintray.user")
-// key = properties.getProperty("bintray.apikey")
- user = project.hasProperty('bintrayUser') ? project.getProperty('bintrayUser') : ""
- key = project.hasProperty('bintrayApikey') ? project.getProperty('bintrayApikey') : ""
+ user = properties.getProperty("bintray.user")
+ key = properties.getProperty("bintray.apikey")
+ if (!user) {
+ user = project.hasProperty('bintrayUser') ? project.getProperty('bintrayUser') : ""
+ }
+ if (!key) {
+ key = project.hasProperty('bintrayApikey') ? project.getProperty('bintrayApikey') : ""
+ }
configurations = ['archives']
pkg {
@@ -109,10 +116,25 @@ bintray {
desc = libraryDescription
gpg {
sign = true //Determines whether to GPG sign the files. The default is false
-// passphrase = properties.getProperty("bintray.gpg.password")
- passphrase = project.hasProperty('bintrayGPG') ? project.getProperty('bintrayGPG') : ""
+ passphrase = properties.getProperty("bintray.gpg.password")
+ if (!passphrase) {
+ passphrase = project.hasProperty('bintrayGPG') ? project.getProperty('bintrayGPG') : ""
+ }
//Optional. The passphrase for GPG signing'
}
+
+ mavenCentralSync {
+ sync = true
+ user = properties.getProperty('bintray.oss.user')
+ if (!user) {
+ user = project.hasProperty('bintray.oss.user') ? project.getProperty('bintray.oss.user') : ""
+ }
+ password = properties.getProperty('bintray.oss.password')
+ if (!password) {
+ password = project.hasProperty('bintray.oss.password') ? project.getProperty('bintray.oss.password') : ""
+ }
+ close = '1'
+ }
}
}
}
diff --git a/vlayout/build.gradle b/vlayout/build.gradle
index 1a2e32cd..e439533c 100644
--- a/vlayout/build.gradle
+++ b/vlayout/build.gradle
@@ -24,20 +24,41 @@
apply plugin: 'com.android.library'
+buildscript {
+ repositories {
+ maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
+ maven { url "http://oss.jfrog.org/oss-snapshot-local/" }
+ mavenCentral()
+ jcenter()
+ }
+
+ dependencies {
+ classpath 'com.android.tools.build:gradle:2.3.0'
+ }
+}
+
+repositories {
+ maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
+ maven { url "http://oss.jfrog.org/oss-snapshot-local/" }
+ jcenter()
+ mavenLocal()
+}
+
+
ext {
bintrayRepo = 'Tangram'
bintrayName = 'vlayout'
- publishedGroupId = GROUP
- libraryName = ARTIFACT
- artifact = ARTIFACT
+ publishedGroupId = project.hasProperty('GROUP') ? GROUP : ''
+ libraryName = project.hasProperty('ARTIFACT') ? ARTIFACT : ''
+ artifact = project.hasProperty('ARTIFACT') ? ARTIFACT : ''
libraryDescription = 'Project vlayout is a powerfull LayoutManager extension for RecyclerView, it provides a group of layouts for RecyclerView. Make it able to handle a complicate situation when grid, list and other layouts in the same recyclerview.'
siteUrl = 'https://github.com/alibaba/vlayout'
gitUrl = 'https://github.com/alibaba/vlayout.git'
- libraryVersion = VERSION_NAME
+ libraryVersion = project.hasProperty('VERSION_NAME') ? VERSION_NAME : ''
developerId = 'longerian'
developerName = 'longerian'
@@ -71,13 +92,19 @@ android {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
- } }
+ }
+ }
+
+ lintOptions {
+ abortOnError false
+ }
+
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
// compile project(':extension')
- if (useNewSupportLibrary == true) {
+ if (project.hasProperty('useNewSupportLibrary')) {
compile 'com.android.support:recyclerview-v7:25.2.0@aar'
compile('com.android.support:support-v4:25.2.0@aar')
compile 'com.android.support:support-annotations:25.2.0'
diff --git a/vlayout/src/main/java/com/alibaba/android/vlayout/Cantor.java b/vlayout/src/main/java/com/alibaba/android/vlayout/Cantor.java
index 73b2d7e8..1729b0b4 100644
--- a/vlayout/src/main/java/com/alibaba/android/vlayout/Cantor.java
+++ b/vlayout/src/main/java/com/alibaba/android/vlayout/Cantor.java
@@ -28,11 +28,11 @@ public static void reverseCantor(long cantor, long[] result) {
result = new long[2];
}
// reverse Cantor Function
- int w = (int) (Math.floor(Math.sqrt(8 * cantor + 1) - 1) / 2);
- int t = (w * w + w) / 2;
+ long w = (long) (Math.floor(Math.sqrt(8 * cantor + 1) - 1) / 2);
+ long t = (w * w + w) / 2;
- int k2 = (int)(cantor - t);
- int k1 = w - k2;
+ long k2 = cantor - t;
+ long k1 = w - k2;
result[0] = k1;
result[1] = k2;
}
diff --git a/vlayout/src/main/java/com/alibaba/android/vlayout/DelegateAdapter.java b/vlayout/src/main/java/com/alibaba/android/vlayout/DelegateAdapter.java
index 0ddf2085..1373c750 100644
--- a/vlayout/src/main/java/com/alibaba/android/vlayout/DelegateAdapter.java
+++ b/vlayout/src/main/java/com/alibaba/android/vlayout/DelegateAdapter.java
@@ -131,13 +131,18 @@ public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType
@SuppressWarnings("unchecked")
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+ Pair pair = findAdapterByPosition(position);
+ if (pair == null) {
+ return;
+ }
+ pair.second.onBindViewHolder(holder, position - pair.first.mStartPosition);
+ pair.second.onBindViewHolderWithOffset(holder, position - pair.first.mStartPosition, position);
}
@SuppressWarnings("unchecked")
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position, List