android之截屏(包括截取scrollview与listview的)

来源:互联网 发布:怎样修改网络密码 编辑:程序博客网 时间:2024/05/22 10:39
scrollview的可以截取屏幕(包括看不见的部分)整个的高度微笑

public
class ScreenShot {
    // 获取指定Activity的截屏,保存到png文件
    publicstaticBitmap takeScreenShot(Activity activity) {
        // View是你需要截图的View
        View view = activity.getWindow().getDecorView();
        view.setDrawingCacheEnabled(true);
        view.buildDrawingCache();
        Bitmap b1 = view.getDrawingCache();
 
        // 获取状态栏高度
        Rect frame =newRect();
        activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
        intstatusBarHeight = frame.top;
        System.out.println(statusBarHeight);
 
        // 获取屏幕长和高
        intwidth = activity.getWindowManager().getDefaultDisplay().getWidth();
        intheight = 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");
        returnb;
    }
 
    // 保存到sdcard
    publicstaticvoid savePic(Bitmap b, String strFileName) {
        FileOutputStream fos =null;
        try{
            fos =newFileOutputStream(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
     * */
    publicstaticBitmap 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");
        }
        returnbitmap;
    }
 
    // 程序入口1
    publicstaticvoid shoot(Activity a) {
        ScreenShot.savePic(ScreenShot.takeScreenShot(a),"/sdcard/screen_test.png");
    }
 
    // 程序入口2
    publicstaticvoid shootView(View view) {
        ScreenShot.savePic(ScreenShot.convertViewToBitmap(view),
                "sdcard/xx.png");
    }
 
    publicstaticBitmap getViewBitmap(View v) {
        v.clearFocus();
        v.setPressed(false);
 
        booleanwillNotCache = v.willNotCacheDrawing();
        v.setWillNotCacheDrawing(false);
 
        // Reset the drawing cache background color to fully transparent
        // for the duration of this operation
        intcolor = 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 + ")",
                    newRuntimeException());
            returnnull;
        }
 
        Bitmap bitmap = Bitmap.createBitmap(cacheBitmap);
 
        // Restore the view
        v.destroyDrawingCache();
        v.setWillNotCacheDrawing(willNotCache);
        v.setDrawingCacheBackgroundColor(color);
 
        returnbitmap;
    }
 
    /**
     * 截取scrollview的屏幕
     * **/
    publicstaticBitmap getBitmapByView(ScrollView scrollView) {
        inth =0;
        Bitmap bitmap =null;
        // 获取listView实际高度
        for(inti = 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);
        finalCanvas canvas =newCanvas(bitmap);
        scrollView.draw(canvas);
        // 测试输出
        FileOutputStream out =null;
        try{
            out =newFileOutputStream("/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
        }
        returnbitmap;
    }
 
    privatestaticString TAG = "Listview and ScrollView item 截图:";
 
    /**
     *  截图listview
     * **/
    publicstaticBitmap getbBitmap(ListView listView) {
        inth =0;
        Bitmap bitmap =null;
        // 获取listView实际高度
        for(inti = 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);
        finalCanvas canvas =newCanvas(bitmap);
        listView.draw(canvas);
        // 测试输出
        FileOutputStream out =null;
        try{
            out =newFileOutputStream("/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
        }
        returnbitmap;
    }
 
}
转载自:http://www.cnblogs.com/lee0oo0/p/3355468.html
0 0