android之截屏(包括截取scrollview与listview的)
来源:互联网 发布:怎样修改网络密码 编辑:程序博客网 时间:2024/05/22 10:39
scrollview的可以截取屏幕(包括看不见的部分)整个的高度
public
class
ScreenShot {
// 获取指定Activity的截屏,保存到png文件
public
static
Bitmap takeScreenShot(Activity activity) {
// View是你需要截图的View
View view = activity.getWindow().getDecorView();
view.setDrawingCacheEnabled(
true
);
view.buildDrawingCache();
Bitmap b1 = view.getDrawingCache();
// 获取状态栏高度
Rect frame =
new
Rect();
activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
int
statusBarHeight = frame.top;
System.out.println(statusBarHeight);
// 获取屏幕长和高
int
width = activity.getWindowManager().getDefaultDisplay().getWidth();
int
height = activity.getWindowManager().getDefaultDisplay()
.getHeight();
// 去掉标题栏
// Bitmap b = Bitmap.createBitmap(b1, 0, 25, 320, 455);
Bitmap b = Bitmap.createBitmap(b1,
0
, statusBarHeight, width, height
- statusBarHeight);
view.destroyDrawingCache();
savePic(b,
"/sdcard/screen_test.png"
);
return
b;
}
// 保存到sdcard
public
static
void
savePic(Bitmap b, String strFileName) {
FileOutputStream fos =
null
;
try
{
fos =
new
FileOutputStream(strFileName);
if
(
null
!= fos) {
b.compress(Bitmap.CompressFormat.PNG,
90
, fos);
fos.flush();
fos.close();
}
}
catch
(FileNotFoundException e) {
e.printStackTrace();
}
catch
(IOException e) {
e.printStackTrace();
}
}
/**
* 把View对象转换成bitmap
* */
public
static
Bitmap convertViewToBitmap(View view) {
view.measure(MeasureSpec.makeMeasureSpec(
0
, MeasureSpec.UNSPECIFIED),
MeasureSpec.makeMeasureSpec(
0
, MeasureSpec.UNSPECIFIED));
view.layout(
0
,
0
, view.getMeasuredWidth(), view.getMeasuredHeight());
view.buildDrawingCache();
Bitmap bitmap = view.getDrawingCache();
if
(bitmap !=
null
) {
System.out.println(
"这不是nullde1"
);
Log.d(
"nullde1"
,
"nullde1"
);
}
else
{
System.out.println(
"这nullnulllnulnlul"
);
}
return
bitmap;
}
// 程序入口1
public
static
void
shoot(Activity a) {
ScreenShot.savePic(ScreenShot.takeScreenShot(a),
"/sdcard/screen_test.png"
);
}
// 程序入口2
public
static
void
shootView(View view) {
ScreenShot.savePic(ScreenShot.convertViewToBitmap(view),
"sdcard/xx.png"
);
}
public
static
Bitmap getViewBitmap(View v) {
v.clearFocus();
v.setPressed(
false
);
boolean
willNotCache = v.willNotCacheDrawing();
v.setWillNotCacheDrawing(
false
);
// Reset the drawing cache background color to fully transparent
// for the duration of this operation
int
color = v.getDrawingCacheBackgroundColor();
v.setDrawingCacheBackgroundColor(
0
);
if
(color !=
0
) {
v.destroyDrawingCache();
}
v.buildDrawingCache();
Bitmap cacheBitmap = v.getDrawingCache();
if
(cacheBitmap ==
null
) {
Log.e(
"TTTTTTTTActivity"
,
"failed getViewBitmap("
+ v +
")"
,
new
RuntimeException());
return
null
;
}
Bitmap bitmap = Bitmap.createBitmap(cacheBitmap);
// Restore the view
v.destroyDrawingCache();
v.setWillNotCacheDrawing(willNotCache);
v.setDrawingCacheBackgroundColor(color);
return
bitmap;
}
/**
* 截取scrollview的屏幕
* **/
public
static
Bitmap getBitmapByView(ScrollView scrollView) {
int
h =
0
;
Bitmap bitmap =
null
;
// 获取listView实际高度
for
(
int
i =
0
; i < scrollView.getChildCount(); i++) {
h += scrollView.getChildAt(i).getHeight();
scrollView.getChildAt(i).setBackgroundResource(R.drawable.bg3);
}
Log.d(TAG,
"实际高度:"
+ h);
Log.d(TAG,
" 高度:"
+ scrollView.getHeight());
// 创建对应大小的bitmap
bitmap = Bitmap.createBitmap(scrollView.getWidth(), h,
Bitmap.Config.ARGB_8888);
final
Canvas canvas =
new
Canvas(bitmap);
scrollView.draw(canvas);
// 测试输出
FileOutputStream out =
null
;
try
{
out =
new
FileOutputStream(
"/sdcard/screen_test.png"
);
}
catch
(FileNotFoundException e) {
e.printStackTrace();
}
try
{
if
(
null
!= out) {
bitmap.compress(Bitmap.CompressFormat.PNG,
100
, out);
out.flush();
out.close();
}
}
catch
(IOException e) {
// TODO: handle exception
}
return
bitmap;
}
private
static
String TAG =
"Listview and ScrollView item 截图:"
;
/**
* 截图listview
* **/
public
static
Bitmap getbBitmap(ListView listView) {
int
h =
0
;
Bitmap bitmap =
null
;
// 获取listView实际高度
for
(
int
i =
0
; i < listView.getChildCount(); i++) {
h += listView.getChildAt(i).getHeight();
}
Log.d(TAG,
"实际高度:"
+ h);
Log.d(TAG,
"list 高度:"
+ listView.getHeight());
// 创建对应大小的bitmap
bitmap = Bitmap.createBitmap(listView.getWidth(), h,
Bitmap.Config.ARGB_8888);
final
Canvas canvas =
new
Canvas(bitmap);
listView.draw(canvas);
// 测试输出
FileOutputStream out =
null
;
try
{
out =
new
FileOutputStream(
"/sdcard/screen_test.png"
);
}
catch
(FileNotFoundException e) {
e.printStackTrace();
}
try
{
if
(
null
!= out) {
bitmap.compress(Bitmap.CompressFormat.PNG,
100
, out);
out.flush();
out.close();
}
}
catch
(IOException e) {
// TODO: handle exception
}
return
bitmap;
}
}
转载自:http://www.cnblogs.com/lee0oo0/p/3355468.html
0 0
- android之截屏(包括截取scrollview与listview的)
- android之截屏(包括截取scrollview与listview的)
- android之截屏(包括截取scrollview与listview的)
- android之截屏(包括截取scrollview与listview的)
- 【android】有关scrollview与listview的something
- Android--Scrollview与Listview的嵌套使用
- android 解决ScrollView与ListView的冲突(TableLayout+ScrollView)
- Android截屏截图方法所有方法汇总(包括Activity、View、ScrollView、ListView、RecycleView、WebView截屏截图)
- Android:scrollview与listview共存
- Android之ScrollView嵌套ListView
- Android之ScrollView嵌套ListView
- Android之ScrollView嵌套ListView
- Android布局中ScrollView与ListView的冲突的方法
- Android布局中ScrollView与ListView的冲突的方法
- listView与ScrollView的冲突
- ListView与ScrollView的联动
- Android中ScrollView与ListView共用问题的解决方案
- 解决Android布局中ScrollView与ListView的冲突
- 【计算机视觉】积分图和积分直方图
- 单片机学习步骤工程师的经验分享
- PAT 乙级 1028.人口普查
- LeetCode#102. Binary Tree Level Order Traversal My Submissions Question
- leetcode 22. Generate Parentheses
- android之截屏(包括截取scrollview与listview的)
- cocos2d-x 精灵 Sprite
- 3月24日学习笔记(活动的启动方式)
- Uva 10891 dp
- 命题范式(propositional normal form)
- 【BZOJ2659】算不出的算式,打表找规律
- C#——判断成绩是否通过
- HDU 1548 A strange lift
- FPGA图像处理系列:图像缩放