无法使用getRootView获取多个屏幕截图

时间:2014-05-28 18:33:15

标签: android

我找到了一些允许截取活动截图的代码。虽然,我遇到了一个问题。由于缺乏更好的术语,它似乎“出现故障”。使用here中的一些代码,我将其设置到位图的位置,并使用setimagebitmap将其放入图像视图中。当我按下按钮截取屏幕截图时,它第一次运行得很好。然而,第二次使图像显示无限量的按钮,下降并变小。我在onclicklistener的开头尝试了destroydrawingcache,但这会让第二次按钮点击时应用程序崩溃。我甚至尝试用setimagebitmap(null)清除图像视图。

这是完成所有工作的活动。

public class MainAvtivity extends Activity
{
    ImageView imgView;
    Button btnScreenshot;
    View rootView;
    Bitmap bmap;

    public void onCreate(Bundle icicle)
    {
        super.onCreate(icicle);
        setContentView(R.layout.main)

        imgView = (ImageView)findViewById(R.id.imageView);
        btnScreenshot = (Button)findViewById(R.id.btnScreenshot);
        rootView = findViewById(android.R.id.content).getRootView();

        btnScreenshot.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View v){
                imgView.setImageBitmap(null);
                rootView.destroyDrawinCache();
                bmap = takeScreenshot();
                setImgView(bmap);
            }
    }
    public Bitmap takeScreenshot()
    {
        rootView.setDrawingCacheEnabled(true);
        return rootView.getDrawingCache();
    }
    public void setImgView(Bitmap bitmap)
    {
        imgView.setImageBitmap(bitmap);
    }
}

1 个答案:

答案 0 :(得分:1)

这是我编辑过的代码。这只是几行。

public class MainAvtivity extends Activity
{
    ImageView imgView;
    Button btnScreenshot;
    View rootView;
    Bitmap bmap;

    public void onCreate(Bundle icicle)
    {
        super.onCreate(icicle);
        setContentView(R.layout.main)

        imgView = (ImageView)findViewById(R.id.imageView);
        btnScreenshot = (Button)findViewById(R.id.btnScreenshot);
        rootView = findViewById(android.R.id.content).getRootView();

        btnScreenshot.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View v){
                imgView.setImageBitmap(null);
                bmap = takeScreenshot();
                setImgView(bmap);
            }
    }
    public Bitmap takeScreenshot()
    {
        rootView.setDrawingCacheEnabled(true);
        rootView.buildDrawingCache(true);
        Bitmap b = Bitmap.createBitmap(rootView.getDrawingCache());
        rootView.setDrawingCacheEnabled(false);
        return b;
    }
    public void setImgView(Bitmap bitmap)
    {
        imgView.setImageBitmap(bitmap);
    }
}