【发布时间】:2019-06-25 00:14:28
【问题描述】:
ScrollView 有设置 x 和 y 滚动偏移的方法,但没有获取当前偏移的方法(我真正感兴趣的是 y 偏移,因为 ScrollView 只支持垂直滚动)。我没有看到任何可以在超类中使用的方法,并尝试了 getTop() 用于内容视图,它始终为零。我错过了什么吗?
【问题讨论】:
标签: android
ScrollView 有设置 x 和 y 滚动偏移的方法,但没有获取当前偏移的方法(我真正感兴趣的是 y 偏移,因为 ScrollView 只支持垂直滚动)。我没有看到任何可以在超类中使用的方法,并尝试了 getTop() 用于内容视图,它始终为零。我错过了什么吗?
【问题讨论】:
标签: android
在 ScrollView 上调用 getScrollY()
查看文档:http://developer.android.com/reference/android/view/View.html#getScrollY%28%29
【讨论】:
boolean lastLineVisible = scrollView.getScrollY() + scrollView.getHeight() + 100 >= textView.getHeight()
你为什么不尝试这样的事情呢?
targetScrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
int scrollX = targetScrollView.getScrollX();
Log.d(TAG, "scrollX: " + scrollX);
}
});
【讨论】:
如果您确定在使用 getScrollY() 或 getTop() 后应该得到一些值,请尝试将这些方法放入 a
yourScroolView.post(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),"Current Y is : "+getScrollY,Toast.LENGTH_SHORT).show();
}
});
现在应该可以了。根据我对这种方法的理解,它只会在布局被绘制后运行。这可能是您之前一直获得 0 的原因之一。希望对您有所帮助。
【讨论】:
【讨论】:
我通过以下方式实现。首先获取屏幕高度和宽度。
DisplayMetrics metrics = getResources().getDisplayMetrics();
float screenWidth = metrics.widthPixels;
float screenHeight = metrics.heightPixels;
然后找出文档高度(总,显示的内容以及屏幕外的内容)
public float getDocumentHeight(){
return (computeVerticalScrollRange() * screenHeight)/computeVerticalScrollExtent();
}
终于得到了偏移量
public float getTopY(){
return (getDocumentHeight() * computeVerticalScrollOffset())/computeVerticalScrollRange();
}
这为您提供了相对于您正在查看的文档部分的窗口顶部,以便您可以找到事件的确切位置
public boolean onTouchEvent(MotionEvent event) {
int y = event.getY() + (int) getTopY();
}
你也可以做类似的事情来处理宽度
【讨论】: