在View类中的onDraw方法的参数Canvas是View绘制的背景,要将View转换为Bitmap实际上就是让Canvas上的绘制操作绘制到Bitmap上。
View转化为Bitmap也称为截屏,让用户看到的View视图转化为图片的过程。
关于View转化Bitmap涉及到的View类中的方法有:
1
2
3
4
5
|
protected
void
onDraw(Canvas canvas)
public
void
buildDrawingCache()
public
void
destroyDrawingCache()
public
Bitmap getDrawingCache()
public
void
setDrawingCacheEnabled(
boolean
enabled)
|
下面是常见的几个View截屏的示例:
1.View转Bitmap
1
2
3
4
5
6
7
8
9
10
11
|
public
final
Bitmap screenShot(View view) {
if
(
null
== view) {
throw
new
IllegalArgumentException(
"parameter can't be null."
);
}
view.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
view.layout(
0
,
0
, view.getMeasuredWidth(), view.getMeasuredHeight());
view.setDrawingCacheEnabled(
true
);
view.buildDrawingCache();
Bitmap bitmap = view.getDrawingCache();
return
bitmap;
}
|
2. Activity转Bitmap,不带状态栏
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
public
final
Bitmap screenShot(Activity activity) {
if
(
null
== activity) {
throw
new
IllegalArgumentException(
"parameter can't be null."
);
}
View view = activity.getWindow().getDecorView();
view.setDrawingCacheEnabled(
true
);
view.buildDrawingCache();
Bitmap b1 = view.getDrawingCache();
Rect frame =
new
Rect();
view.getWindowVisibleDisplayFrame(frame);
int
statusBarHeight = frame.top;
Point point =
new
Point();
activity.getWindowManager().getDefaultDisplay().getSize(point);
int
width = point.x;
int
height = point.y;
Bitmap b2 = Bitmap.createBitmap(b1,
0
, statusBarHeight, width, height - statusBarHeight);
view.destroyDrawingCache();
return
b2;
}
|
3. ScrollView转长Bitmap(类似锤子便签的截长图)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public
final
Bitmap screenShot(ScrollView scrollView) {
if
(
null
== scrollView) {
throw
new
IllegalArgumentException(
"parameter can't be null."
);
}
int
height =
0
;
Bitmap bitmap;
for
(
int
i =
0
, s = scrollView.getChildCount(); i < s; i++) {
height += scrollView.getChildAt(i).getHeight();
scrollView.getChildAt(i).setBackgroundResource(android.R.drawable.screen_background_light);
}
bitmap = Bitmap.createBitmap(scrollView.getWidth(), height, Bitmap.Config.ARGB_8888);
final
Canvas canvas =
new
Canvas(bitmap);
scrollView.draw(canvas);
return
bitmap;
}
|
本文转自 secondriver 51CTO博客,原文链接:http://blog.51cto.com/aiilive/1711443,如需转载请自行联系原作者