`

取得当前屏幕的截图

阅读更多
取得当前屏幕的截图主要使用了Bitmap 类里的方法,首相取得一个bitmap 然后用取得的bitmap 去绘制一张图片然后进行保存。
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Rect;
import android.os.Environment;
import android.util.Log;
import android.view.View;
public class ShotScreen {
	
	private static final String TAG="shotscreen";
	@SuppressWarnings("unused")
	private static Bitmap takeScreenShot(Activity activity){
		View view =activity.getWindow().getDecorView();
		view.setDrawingCacheEnabled(true);
		view.buildDrawingCache();
		Bitmap bitmap = view.getDrawingCache();
		Rect rect = new Rect();
		activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
		int statusBarHeight = rect.top;
		System.out.println(statusBarHeight);
		
		int width =activity.getWindowManager().getDefaultDisplay().getWidth();
		int height =activity.getWindowManager().getDefaultDisplay().getHeight();
		
		Bitmap bitmap2 = Bitmap.createBitmap(bitmap,0,statusBarHeight, width, height - statusBarHeight);
		view.destroyDrawingCache();
		return bitmap2;
	}
	
	@SuppressWarnings("unused")
	private static void savePic(Bitmap bitmap,String filename){
		FileOutputStream fileOutputStream = null;
		try {
			fileOutputStream = new FileOutputStream(filename);
			if (fileOutputStream != null) {
				bitmap.compress(Bitmap.CompressFormat.PNG, 90, fileOutputStream);
				fileOutputStream.flush();
				fileOutputStream.close();
			}
		} catch (FileNotFoundException e) {
			Log.d(TAG, "Exception:FileNotFoundException");
			e.printStackTrace();
		} catch (IOException e) {
			Log.d(TAG, "IOException:IOException");
			e.printStackTrace();
		}
	}
	
	
	/**
	 * 
	 * @param a
	 */
	public static void shoot(Activity a){
		if (android.os.Environment.MEDIA_MOUNTED != "mounted") {
			ShotScreen.savePic(ShotScreen.takeScreenShot(a), "/sdcard/抽样.png");   
		}else{
			ShotScreen.savePic(ShotScreen.takeScreenShot(a), "/data/data/"+a.getPackageName()+"/抽样.png");
		}
    }   

android之截屏(包括截取scrollview与listview的)
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;
    }
 
}


Android中View转换为Bitmap及getDrawingCache=null的解决方法
http://www.cnblogs.com/devinzhang/archive/2012/06/05/2536848.html
分享到:
评论

相关推荐

    Android取得当前屏幕的截图

    "Android 取得当前屏幕的截图" Android 取得当前屏幕的截图是 Android 应用程序开发中的一项常见需求。为了实现这个功能,需要使用 Bitmap 类里的方法,首先取得一个 bitmap,然后用取得的 bitmap 去绘制一张图片,...

    Qt获取屏幕分辨率

    在Qt编程中,获取屏幕分辨率是一项常见的需求,特别是在开发图形用户界面时,了解用户的显示器设置对布局和设计至关重要。本文将详细讲解如何使用Qt库来获取屏幕分辨率,并提供相关的实践示例。 Qt提供了QScreen类...

    用系统钩子取得当前位置

    这个场景中,我们关注的是“用系统钩子取得当前位置”,即通过编程手段获取鼠标在屏幕上的点击位置,并将其记录到文件中。下面将详细阐述系统钩子的工作原理、如何实现以及涉及的相关技术。 系统钩子,顾名思义,是...

    屏幕取色器,点屏幕上任何一点,就能取得其RGB颜色.zip

    首先,程序会通过操作系统提供的API(例如Windows API或Mac OS的Quartz框架)捕获屏幕的当前帧缓冲区,这一过程称为屏幕抓图。抓图后,程序会定位到用户鼠标点击的位置,然后提取该像素的颜色信息。在RGB色彩模式下...

    Android基础教程(四)之-取得手机屏幕大小DisplayMetrics的应用

    ### Android基础教程(四)之-取得手机屏幕大小DisplayMetrics的应用 #### 一、引言 在Android开发中,为了确保应用能够在不同尺寸和分辨率的设备上正常运行,开发者经常需要根据当前设备的屏幕特性来调整布局或者...

    获取手机屏幕大小(DisplayMetrics类取得画面宽高)

    ### 获取手机屏幕大小(DisplayMetrics类取得画面宽高) 在Android应用开发过程中,了解并获取设备的屏幕尺寸是一项基本且重要的任务。本篇文章将基于提供的代码示例,详细解析如何使用`DisplayMetrics`类来获取手机...

    屏幕捕捉5.62.05

    屏幕截图工具在我们的日常生活中扮演着不可或缺的角色。随着技术的不断进步,屏幕捕捉软件的功能也越来越强大和多样化。本文将详细探讨一款名为“屏幕捕捉5.62.05”的软件,它不仅能够满足日常需求,还为用户提供了...

    一个获取屏幕分辨率的VI

    如题,可以获取当前屏幕的分辨率,如果屏幕缩放了,那么取得是缩放计算后的分辨率 如:分辨率为1920×1080,屏幕缩放为125%,那么该VI计算得出的是1536×864 (1920/1.25=1536 1080/1.25=864) 该VI主要用于某些时候...

    关于获取多个屏幕分辨率以及进行一些设置1

    我们还定义了一个 MonitorInfo 结构体,用于保存显示器信息,包括显示器名称和当前名称的显示器支持的分辨率模式。VEC_MONITORMODE_INFO 是一个 vector,用于保存所有显示器信息。 在 MonitorAdapter 类中,我们...

    实用的屏幕取色的小工具

    而Ctrl+Alt+Z则用于显示或隐藏软件界面,确保在不干扰当前工作流程的情况下,用户可以随时调用或隐藏工具。 在实际使用中,屏幕取色工具通常会显示颜色的RGB、HEX、CMYK等不同颜色模式的数值,这是因为这些颜色模式...

    易语言小猪炫彩屏幕色调整

    1. **取得窗口信息**:这是获取屏幕或特定窗口当前状态的过程。在易语言中,开发者可能使用`GetWindowInfo`函数或类似的API,以获取窗口的位置、大小、风格等信息。 2. **设置窗口信息**:在获取到必要的信息后,...

    浅谈Android屏幕自适应.pdf

    在解决方案中,我们提出了一个实践可行的解决方案,该方案利用设计时屏幕和当前运行设备的屏幕之比,对界面上的视图元素进行适当的缩放,从而达到自适应的目的。 此外,我们还讨论了 Google 公 司为了屏幕的自适应...

    Sip Pro 1.2 屏幕取色工具

    sip 是Mac os平台上的一款非常不错的Mac屏幕取色软件,你只需要鼠标点一下即可取得屏幕当前位置的颜色值,并将数据自动存到剪切板,方便随时粘贴出来。支持 CSS、UIColor 等多种格式。 应用介绍 Sip是一款位于菜单...

    Win7屏幕保护设置方法.docx

    在这个窗口中,用户可以看到当前可用的屏幕保护样式列表,并且通过预览功能,可以直观地查看不同屏幕保护样式的效果,这帮助用户作出选择。 在选择合适的屏幕保护样式后,用户还可以进一步对屏幕保护样式进行自定义...

    手机屏幕分析

    SLCD屏幕的流行主要归功于HTC,因为该品牌旗下的大部分主流机型都采用该材质的屏幕,并且取得了非常不错的市场认可。代表机型有:HTC G11(incredible S)、HTC Mozart、HTC G14(Sensation)、HTC G18(Sensation XE)...

    Windows 88.1平板怎么锁定屏幕旋转.docx

    紧接着,系统会弹出一个新的窗口,这个窗口显示了当前屏幕的分辨率设置信息。 3. 在这个设置窗口中,你会发现一个名为“允许屏幕自动旋转”的选项。如果你希望锁定屏幕旋转,不希望屏幕因设备方向的改变而转动,那么...

    android获取屏幕高度和宽度的实现方法

    `将当前屏幕的信息填充到`DisplayMetrics`对象中: ```java getWindowManager().getDefaultDisplay().getMetrics(metric); ``` 3. 通过`metric.widthPixels`和`metric.heightPixels`分别获取屏幕的宽度和高度(像素...

    易语言源码易语言截获鼠标单击事件用于屏幕取色.rar

    4. 显示或保存颜色:将取得的颜色值显示在界面上,或者保存到文件中供后续使用。 这个程序的源码可以作为学习易语言事件处理和图形操作的实例,通过阅读和分析代码,初学者可以了解到如何在易语言中进行事件响应和...

    Android TabHost实现屏幕UI窗口的TAB切换功能.rar

    Android TabHost实现屏幕UI窗口的TAB切换功能,实现的过程:声明TabHost对象、取得TabHost对象,为TabHost添加标签,新建一个newTabSpec(newTabSpec),设置其标签和图标(setIndicator),设置内容(setContent),然后...

Global site tag (gtag.js) - Google Analytics