下面列出了android.webkit.WebView#getContentHeight ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private Bitmap captureWebView3(WebView wv) {
try {
float scale = wv.getScale();
int height = (int) (wv.getContentHeight() * scale + 0.5);
Bitmap bitmap = Bitmap.createBitmap(wv.getWidth(), height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
wv.draw(canvas);
return bitmap;
} catch (Exception e) {
try {
openCache(wv);
return wv.getDrawingCache();
} finally {
closeCache(wv);
}
}
}
/**
* Convert view to an image. Can be used to make animations smoother.
*
* @param context The current Context or Activity that this method is called from
* @param viewToBeConverted View to convert to a Bitmap
* @return Bitmap object that can be put in an ImageView. Will look like the converted viewToBeConverted.
*/
public static Bitmap viewToImage(Context context, WebView viewToBeConverted) {
int extraSpace = 2000; //because getContentHeight doesn't always return the full screen height.
int height = viewToBeConverted.getContentHeight() + extraSpace;
Bitmap viewBitmap = Bitmap.createBitmap(viewToBeConverted.getWidth(), height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(viewBitmap);
viewToBeConverted.draw(canvas);
//If the view is scrolled, cut off the top part that is off the screen.
try {
int scrollY = viewToBeConverted.getScrollY();
if (scrollY > 0) {
viewBitmap = Bitmap.createBitmap(viewBitmap, 0, scrollY, viewToBeConverted.getWidth(), height - scrollY);
}
} catch (Exception ex) {
Log.e("PercolateAndroidUtils", "Could not remove top part of the webview image. ex=" + ex);
}
return viewBitmap;
}
/**
* Convert view to an image. Can be used to make animations smoother.
*
* @param context The current Context or Activity that this method is called from
* @param viewToBeConverted View to convert to a Bitmap
* @return Bitmap object that can be put in an ImageView. Will look like the converted viewToBeConverted.
*/
public static Bitmap viewToImage(Context context, WebView viewToBeConverted) {
int extraSpace = 2000; //because getContentHeight doesn't always return the full screen height.
int height = viewToBeConverted.getContentHeight() + extraSpace;
Bitmap viewBitmap = Bitmap.createBitmap(viewToBeConverted.getWidth(), height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(viewBitmap);
viewToBeConverted.draw(canvas);
//If the view is scrolled, cut off the top part that is off the screen.
try {
int scrollY = viewToBeConverted.getScrollY();
if (scrollY > 0) {
viewBitmap = Bitmap.createBitmap(viewBitmap, 0, scrollY, viewToBeConverted.getWidth(), height - scrollY);
}
} catch (Exception ex) {
Log.e("PercolateAndroidUtils", "Could not remove top part of the webview image. ex=" + ex);
}
return viewBitmap;
}
/**
* Convert view to an image. Can be used to make animations smoother.
*
* @param context The current Context or Activity that this method is called from.
* @param viewToBeConverted View to convert to a Bitmap.
* @return Bitmap object that can be put in an ImageView. Will look like the converted viewToBeConverted.
*/
public static Bitmap viewToImage(Context context, WebView viewToBeConverted) {
int extraSpace = 2000; //because getContentHeight doesn't always return the full screen height.
int height = viewToBeConverted.getContentHeight() + extraSpace;
Bitmap viewBitmap = Bitmap.createBitmap(viewToBeConverted.getWidth(), height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(viewBitmap);
viewToBeConverted.draw(canvas);
//If the view is scrolled, cut off the top part that is off the screen.
try {
int scrollY = viewToBeConverted.getScrollY();
if (scrollY > 0) {
viewBitmap = Bitmap.createBitmap(viewBitmap, 0, scrollY, viewToBeConverted.getWidth(), height - scrollY);
}
} catch (Exception ex) {
Log.e("Caffeine", "Could not remove top part of the webview image. ex=" + ex);
}
return viewBitmap;
}
/**
* 规避 contentHeight 异步变化
* @return
*/
private boolean canWebViewScrollUp(WebView webView) {
if (mWebViewContentHeight == 0) {
mWebViewContentHeight = (int) (webView.getContentHeight() * webView.getScale());
}
final int offset = webView.getScrollY();
final int range = mWebViewContentHeight - webView.getHeight();
if (range == 0) {
return false;
}
return offset > 2;
}
/**
* 规避 contentHeight 异步变化
* @return
*/
private boolean canWebViewScrollDown(WebView webView) {
if (mWebViewContentHeight == 0) {
mWebViewContentHeight = (int) (webView.getContentHeight() * webView.getScale());
}
final int offset = webView.getScrollY();
final int range = mWebViewContentHeight - webView.getHeight();
if (range == 0) {
return false;
}
return offset < range - 2;
}
private static void createType2(WebView webView, FileHelper.OnSavedToGalleryListener listener) {
float scale = webView.getScale();
int webViewHeight = (int) (webView.getContentHeight() * scale + 0.5);
Bitmap bitmap = Bitmap.createBitmap(webView.getWidth(), webViewHeight, Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
webView.draw(canvas);
try {
FileHelper.saveImageToGallery(PalmApp.getContext(), bitmap, true, listener);
bitmap.recycle();
} catch (Exception e) {
LogUtils.e(e.getMessage());
}
}
private void invalidateDividersForWebView(WebView view, final boolean setForTop, boolean setForBottom, boolean hasButtons) {
if (setForTop) {
mDrawTopDivider = mTitleBar != null &&
mTitleBar.getVisibility() != View.GONE &&
//Not scrolled to the top.
view.getScrollY() + view.getPaddingTop() > 0;
}
if (setForBottom) {
//noinspection deprecation
mDrawBottomDivider = hasButtons &&
view.getScrollY() + view.getMeasuredHeight() - view.getPaddingBottom() < view.getContentHeight() * view.getScale();
}
}
private float convertWebViewToScreenY(float y) {
if (ttsHost == null) {
Log.w(TAG, "convertWebViewToScreenY() ttsHost is null");
return 0;
}
WebView webView = ttsHost.getWebView();
return y * webView.getHeight() / webView.getContentHeight();
}
public static boolean isWebViewToBottom(WebView webview, int mTouchSlop) {
return webview != null && ((webview.getContentHeight() * webview.getScale() - (webview.getHeight() + webview.getScrollY())) <= 2 * mTouchSlop);
}
private static boolean canWebViewScroll(WebView view) {
//noinspection deprecation
return view.getMeasuredHeight() < view.getContentHeight() * view.getScale();
}
public static boolean isWebViewToBottom(WebView webview, int mTouchSlop) {
return webview != null && ((webview.getContentHeight() * webview.getScale() - (webview.getHeight() + webview.getScrollY())) <= 2 * mTouchSlop);
}
public static boolean isWebViewToBottom(WebView webView) {
return webView != null && webView.getContentHeight() * webView.getScale() == (webView.getScrollY() + webView.getMeasuredHeight());
}
public static boolean isWebViewToBottom(WebView webView) {
return webView != null && webView.getContentHeight() * webView.getScale() == (webView.getScrollY() + webView.getMeasuredHeight());
}