用android中的viewpager适配器有没有办法减慢滚动速度?
你知道,我一直在看这段代码.我无法弄清楚我错了什么.
try{
Field mScroller = mPager.getClass().getDeclaredField("mScroller");
mScroller.setAccessible(true);
Scroller scroll = new Scroller(cxt);
Field scrollDuration = scroll.getClass().getDeclaredField("mDuration");
scrollDuration.setAccessible(true);
scrollDuration.set(scroll, 1000);
mScroller.set(mPager, scroll);
}catch (Exception e){
Toast.makeText(cxt, "something happened", Toast.LENGTH_LONG).show();
}
Run Code Online (Sandbox Code Playgroud)
它没有改变什么,但没有例外发生?
加载页面后,强制Android将webview存储到媒体的最佳方法是什么?
更多细节:
每个页面都将丰富的图像,脚本和样式.
每页大约0.5到1兆字节.
一旦调用OnFinishedLoading Override,它们将被保存.
最好将其保存到SD卡,然后使用本地仓库将其打开备份.
不确定我是否应该只为webview使用sql数据库,或者采用每个视图并写出文件.
如果我做后者,那么最简单的方法是什么,所以我不必写一个完整的webcrawler来连接每个文件?
我最近注意到,当我从文件(使用资源或本地目录)加载基于代码的webview时,一旦调用destroy()方法,WebView将泄漏内存.我已将其缩小到引用问题.程序/ webview会复制原始视图并丢失JNI表中的引用 - 这最终会导致程序在512个条目后崩溃.
我已经看过这篇文章了,但是非泄漏的webview修复似乎不适用于资产或外部文件夹中的HTML.
当应用程序完全基于服务器时,该问题不存在; 但是,我需要应用程序能够"同步"数据并使用这些视图更新脱机存储库.
更多信息:我已将网页视图放入ViewPager中以允许滚动.这个问题在3.2.4/1中不存在,但已出现在4.0.3中.我收到了很多JNI警告,(找不到条目)并且在视图被销毁后它们仍然存在.我通过hprof看了它,我注意到HTML在丢失的变量中保留了残余.
任何有关如何纠正这种行为的意见将不胜感激.
编辑:
崩溃的具体细节
Failed adding to JNI local ref table (has 512 entries)
"Thread-375" prio=5 tid=15 RUNNABLE
| group="main" sCount=0 dsCount=0 obj=0x41504a90 self=0x1a9cf80
| sysTid=10314 nice=0 sched=0/0 cgrp=default handle=27159240
| schedstat=( 455083000 66745000 774 ) utm=30 stm=15 core=3
at android.content.res.AssetManager.readAsset(Native Method)
at android.content.res.AssetManager.access$700(AssetManager.java:35)
at android.content.res.AssetManager$AssetInputStream.read(AssetManager.java:573)
at dalvik.system.NativeStart.run(Native Method)
Run Code Online (Sandbox Code Playgroud)
更新:
要解决此问题,您必须从SD卡或其他一些存储机制加载.加载Javascript文件时,该错误是永久性的,我不知道它是否已在Chrome中修复,但在最新的操作系统中似乎没有在浏览器中修复.
稍后我将更新一个完整的教程,介绍如何实现WebView内部a ViewPager,但是我得到一个非常奇怪的问题,我不明白如何修复.
以下是我正在运行的实现......
XML:
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/lastLoginText"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_below="@+id/PreferencesButton" >
</android.support.v4.view.ViewPager>
Run Code Online (Sandbox Code Playgroud)
ViewPager实例化对象:
((ViewPager) collection).removeAllViews();
WebView a = webview[position];
((ViewPager) collection).addView(a);
Run Code Online (Sandbox Code Playgroud)
Webview是在单独的(InitWebViews)中设置的
webview[0] = new WebView(this.getApplicationContext());
webview[0].loadUrl("file:///android_asset/test.html");
webview[1] = new WebView(this.getApplicationContext());
webview[1].loadUrl("file:///android_asset/test.html");
webview[2] = new WebView(this.getApplicationContext());
webview[2].loadUrl("file:///android_asset/test.html");
Run Code Online (Sandbox Code Playgroud)
任何想法为什么会这样,或者我如何强迫它viewWidth成为1280?或者我启动WebViews 的方式还有其他问题吗?
android view android-layout android-webview android-viewpager