android 截图scrollview

来源:互联网 发布:matlab退火算法 编辑:程序博客网 时间:2024/05/15 12:58
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);}// 创建对应大小的bitmapbitmap = 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的bitmapint 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;}}

0 0