import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.view.View;
import android.widget.ListView;
import android.widget.ScrollView;
/**
* 截图返回bitmap
*/
public class SurfaceControl {
public static Bitmap screenshot(View view) {
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap bmp = view.getDrawingCache();
return bmp;
}
public static Bitmap screenshot(View view, int edgeLength) {
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap bmp = view.getDrawingCache();
Bitmap result = centerSquareScaleBitmap(bmp, edgeLength);
return result;
}
/**
* 截取scrollview的屏幕
**/
public static Bitmap getBitmapByScrollView(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);
}
// 创建对应大小的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;
}
/**
* 截图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;
}
/**
*
* @param bitmap
* 原图
* @param edgeLength
* 希望得到的正方形部分的边长
* @return 缩放截取正中部分后的位图。
*/
public static Bitmap centerSquareScaleBitmap(Bitmap bitmap, int edgeLength) {
if (null == bitmap || edgeLength <= 0) {
return null;
}
Bitmap result = bitmap;
int widthOrg = bitmap.getWidth();
int heightOrg = bitmap.getHeight();
if (widthOrg > edgeLength && heightOrg > edgeLength) {
// 压缩到一个最小长度是edgeLength的bitmap
int longerEdge = (int) (edgeLength * Math.max(widthOrg, heightOrg) / Math.min(widthOrg, heightOrg));
int scaledWidth = widthOrg > heightOrg ? longerEdge : edgeLength;
int scaledHeight = widthOrg > heightOrg ? edgeLength : longerEdge;
Bitmap scaledBitmap;
try {
scaledBitmap = Bitmap.createScaledBitmap(bitmap, scaledWidth, scaledHeight, true);
} catch (Exception e) {
return null;
}
// 从图中截取正中间的正方形部分。
int xTopLeft = (scaledWidth - edgeLength) / 2;
int yTopLeft = (scaledHeight - edgeLength) / 2;
try {
result = Bitmap.createBitmap(scaledBitmap, xTopLeft, yTopLeft, edgeLength, edgeLength);
scaledBitmap.recycle();
} catch (Exception e) {
return null;
}
}
return result;
}
}
android 截图scrollview
最新推荐文章于 2021-05-29 13:19:30 发布