我有一个自定义视图,可以将可滚动的位图绘制到屏幕上.为了初始化它,我需要传递父布局对象的像素大小.但是在onCreate和onResume函数期间,尚未绘制布局,因此layout.getMeasuredHeight()返回0.
作为一种解决方法,我添加了一个处理程序等待一秒然后测量.这是有效的,但它很草率,我不知道在布局绘制之前我能在多长时间内缩短时间.
我想知道的是,如何检测布局何时被绘制?有事件或回调吗?
我有一个应用程序,它有一个使用的活动ScrollView.我需要检测用户何时到达底部ScrollView.我做了一些googleing,我发现这个页面在哪里解释.但是,在这个例子中,那些人扩展了ScrollView.正如我所说,我需要扩展Activity.
所以,我说"好吧,让我们尝试使自定义类扩展ScrollView,覆盖onScrollChanged()方法,检测滚动结束,并相应地采取行动".
我做了,但在这一行:
scroll = (ScrollViewExt) findViewById(R.id.scrollView1);
Run Code Online (Sandbox Code Playgroud)
它扔了一个 java.lang.ClassCastException.我<ScrollView>在XML中更改了标签,但显然它不起作用.我的问题是:为什么,如果ScrollViewExt延伸ScrollView,扔到我脸上ClassCastException?有没有办法检测滚动结束而不会搞得太多?
谢谢大家
编辑:正如所承诺的,这是我的XML重要部分:
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<WebView
android:id="@+id/textterms"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:textColor="@android:color/black" />
</ScrollView>
Run Code Online (Sandbox Code Playgroud)
我改变了它从TextView到WebView到能证明里面的文字.我想要实现的是"在完全阅读合同条款之前,接受按钮不会激活"的事情.我的扩展类称为ScrollViewExt.如果我更改标签ScrollView,ScrollViewExt它会抛出一个
android.view.InflateException: Binary XML file line #44: Error inflating class ScrollViewExt
Run Code Online (Sandbox Code Playgroud)
因为它不懂标签ScrollViewEx.我不认为它有解决方案......
谢谢你的回答!
我使用下面的代码进行转换,但似乎只能获取显示屏幕中的内容而无法获取不在显示屏幕中的内容.
有没有办法让所有内容都滚动出来?
Bitmap viewBitmap = Bitmap.createBitmap(mScrollView.getWidth(),mScrollView.getHeight(),Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(viewBitmap);
mScrollView.draw(canvas);
Run Code Online (Sandbox Code Playgroud) 当用户向下滚动> 90%时,我想做一些事情,所以我想我可以像在ListView中一样添加onScrollListener.不幸的是,ScrollView似乎没有类似的方法.有什么方法可以做我想做的事; 当用户向下滚动约90%时收到通知?
谢谢,Erik
我已经看过一些论坛,但是这些技巧对我来说不起作用。
我有以下代码:
scrollview = (ScrollView)v.findViewById(R.id.scrollView);
scrollview.getViewTreeObserver().addOnScrollChangedListener(new OnScrollChangedListener() {
@Override
public void onScrollChanged() {
Log.d(MainActivity.TAG, "scroll ch: "+scrollview.getScrollY()+"/"+scrollview.getChildAt(0).getHeight());
}
});
Run Code Online (Sandbox Code Playgroud)
在我的layout.xml中
<ScrollView
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" >
<LinearLayout
android:id="@+id/principal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@drawable/horiz"
android:orientation="vertical"
android:showDividers="end|middle" >
</LinearLayout>
</ScrollView>
Run Code Online (Sandbox Code Playgroud)
当我向下滚动到最后一个时,我得到的getScrollY()小于getChildAt(0).getHeight()。
我怎样才能使两者的总大小相同?