Comments (3)
额,是嵌套滑动 控制fab的无法流畅的滑动
public class MySmartTable extends SmartTable implements NestedScrollingChild {
public static final String TAG = MySmartTable.class.getSimpleName();
private int mLastMotionY;
private final int[] mScrollOffset = new int[2];
private final int[] mScrollConsumed = new int[2];
private int mNestedYOffset;
private NestedScrollingChildHelper mChildHelper;
private boolean _nestedScroll=true;
public MySmartTable(Context context) {
super(context);
init(context, null, 0);
}
public MySmartTable(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs, 0);
}
public MySmartTable(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs, defStyleAttr);
}
private void init(Context context, AttributeSet attrs, int defStyle) {
mChildHelper = new NestedScrollingChildHelper(this);
if (attrs != null) {
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SmartTable, defStyle, 0);
boolean nestedScroll = a.getBoolean(R.styleable.SmartTable_nestedScrollable, _nestedScroll);
a.recycle();
mChildHelper.setNestedScrollingEnabled(nestedScroll);
} else {
mChildHelper.setNestedScrollingEnabled(true);
}
// setNestedScrollingEnabled(true);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
boolean result = false;
MotionEvent trackedEvent = MotionEvent.obtain(event);
final int action = event.getActionMasked();// MotionEvent.getActionMasked(event); masked解决多指触摸bug.
if (action == MotionEvent.ACTION_DOWN) {
mNestedYOffset = 0;
}
int y = (int) event.getY();
event.offsetLocation(0, mNestedYOffset);
switch (action) {
case MotionEvent.ACTION_DOWN:
mLastMotionY = y;
startNestedScroll(ViewCompat.SCROLL_AXIS_VERTICAL);
result = super.onTouchEvent(event);
break;
case MotionEvent.ACTION_MOVE:
int deltaY = mLastMotionY - y;
if (dispatchNestedPreScroll(0, deltaY, mScrollConsumed, mScrollOffset)) {
deltaY -= mScrollConsumed[1];
trackedEvent.offsetLocation(0, mScrollOffset[1]);
mNestedYOffset += mScrollOffset[1];
}
int oldY = getScrollY();
mLastMotionY = y - mScrollOffset[1];
if (deltaY < 0) {
int newScrollY = Math.max(0, oldY + deltaY);
deltaY -= newScrollY - oldY;
if (dispatchNestedScroll(0, newScrollY - deltaY, 0, deltaY, mScrollOffset)) {
mLastMotionY -= mScrollOffset[1];
trackedEvent.offsetLocation(0, mScrollOffset[1]);
mNestedYOffset += mScrollOffset[1];
}
} else {//解决 只能隐藏却无法显示问题。
int newScrollY = Math.min(0, oldY + deltaY);
deltaY -= newScrollY - oldY;
if (dispatchNestedScroll(0, newScrollY - deltaY, 0, deltaY, mScrollOffset)) {
mLastMotionY -= mScrollOffset[1];
trackedEvent.offsetLocation(0, mScrollOffset[1]);
mNestedYOffset += mScrollOffset[1];
}
}
trackedEvent.recycle();
result = super.onTouchEvent(trackedEvent);
break;
case MotionEvent.ACTION_POINTER_DOWN:
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
stopNestedScroll();
result = super.onTouchEvent(event);
break;
}
return result;
}
//todo 导出待做
// NestedScrollingChild
@Override
public void setNestedScrollingEnabled(boolean enabled) {
if (mChildHelper == null) {
_nestedScroll=enabled;
return;
}
mChildHelper.setNestedScrollingEnabled(enabled);
}
@Override
public boolean isNestedScrollingEnabled() {
return mChildHelper.isNestedScrollingEnabled();
}
@Override
public boolean startNestedScroll(int axes) {
return mChildHelper.startNestedScroll(axes);
}
@Override
public void stopNestedScroll() {
if (BuildConfig.DEBUG) {
Log.w(TAG, "STOP NESTED SCROLL");
}
mChildHelper.stopNestedScroll();
}
@Override
public boolean hasNestedScrollingParent() {
return mChildHelper.hasNestedScrollingParent();
}
@Override
public boolean dispatchNestedScroll(int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int[] offsetInWindow) {
return mChildHelper.dispatchNestedScroll(dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed, offsetInWindow);
}
@Override
public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow) {
return mChildHelper.dispatchNestedPreScroll(dx, dy, consumed, offsetInWindow);
}
@Override
public boolean dispatchNestedFling(float velocityX, float velocityY, boolean consumed) {
return mChildHelper.dispatchNestedFling(velocityX, velocityY, consumed);
}
@Override
public boolean dispatchNestedPreFling(float velocityX, float velocityY) {
return mChildHelper.dispatchNestedPreFling(velocityX, velocityY);
}
}
from smarttable.
用 协调滑动的不行。。协调滑动应该怎么改呢?
from smarttable.
套一层nestedscrollview搞定。。
from smarttable.
Related Issues (20)
- ManyActivity 中的代码加点击事件不触发 HOT 1
- MergeModeActivity 内设置点击事件也不触发
- 这里应该判断countStyle 我搞半天莫名其妙,崩溃原因找到了 HOT 1
- 选中指定行,高亮,滚动到指定行的功能怎么搞 HOT 1
- 能改成支持Kotlin的吗? table.setData()这里只能传入java类型的数据现在
- 滑动会触发点击事件
- java.lang.IndexOutOfBoundsException: Index: 1, Size: 2
- 合并单元格问题 HOT 2
- Column.setfixed固定列,如果表格宽度超出屏幕,往左侧滑动时会导致统计行的数据全部刷新成空白出来?求教这是什么原因
- kotlin 下如何 setTableData HOT 1
- 求助:如何设置表格名称(tableName)的字体大小和单独设置某个columnName的字体大小 HOT 1
- 在布局中 宽度无法 wrap_content HOT 1
- QQ交流群都没了,有没有新的交流群?
- 表格宽度固定,如何让columnName自动换行显示,有大佬知道的不? HOT 1
- 如何上传图片或者一个格子显示多张图片?
- 群是不是解散了
- JSON格式数据作为数据源,有时表格显示不出来,需要手动滑动屏幕才能显示出来
- 反馈一个关以json生成列表的问题 HOT 1
- Khai
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from smarttable.