【问题标题】:How to take screen shot of a ImageView?如何截取 ImageView 的屏幕截图?
【发布时间】:2013-11-16 00:10:15
【问题描述】:

您好,我正在尝试截取一个 Imageview 的屏幕截图,上面有一些绘图。 我可以做绘图部分和保存部分,因为我使用了

 "View v = view.getRootView();"

之前捕获整个屏幕,我发现它可以工作,因为它可以在图库中看到它。

但是我现在只需要捕获图像视图的屏幕截图(而不是整个屏幕),我遇到了麻烦。当我的用户按下保存按钮时,它希望它只创建一个图像视图的 bmp。目前它用我之前的两种方法为我捕获了黑屏。我以为它的高度和宽度是正确的,但它仍然不起作用。

我从Taking a "screenshot" of a specific layout in Android 得到我的方法 2 想法 但它不起作用,即使很多其他问题与它相似,我都检查了它们。

//In constructor to let u guys know how i set up the imageView
imageView.setImageBitmap(bitmap);
...
imageView = (ImageView) this.findViewById(R.id.ImageView);
...

方法一截取imageView的截图

Bitmap bm = Bitmap.createBitmap(imageView.getWidth(), imageView.getHeight(), Bitmap.Config.ARGB_8888);

方法 2 截取 imageView 的屏幕截图

View z = (ImageView) findViewById(R.id.ImageView);
               z.setDrawingCacheEnabled(true);   
               int totalHeight = z.getHeight();
               int totalWidth = z.getWidth();
                z.layout(0, 0, totalWidth, totalHeight);       
                z.buildDrawingCache(true);
                Bitmap bm = Bitmap.createBitmap(z.getDrawingCache());             
                z.setDrawingCacheEnabled(false);
                    Toast.makeText(Draw.this, "Taking Screenshot", Toast.LENGTH_SHORT).show();  
                    MediaStore.Images.Media.insertImage(getContentResolver(), bm, null, null); 

这里是 XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/RL"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".Draw" >

    <ImageView
        android:id="@+id/ImageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/btnLoad2"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/ic_launcher" />

    <Button
        android:id="@+id/BtnSave"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/ImageView"
        android:layout_alignTop="@+id/btnLoad2"
        android:text="Save Picture" />

    <Button
        android:id="@+id/btnLoad2"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/ImageView"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="40dp"
        android:layout_toLeftOf="@+id/BtnSave"
        android:text="@string/Load" />

</RelativeLayout>

【问题讨论】:

    标签: android imageview screenshot bmp


    【解决方案1】:

    你为什么打电话给z.buildDrawingCache(true)

    这应该足以创建您的视图的位图

    View z = (ImageView) findViewById(R.id.ImageView);
    z.setDrawingCacheEnabled(true);
    Bitmap bitmap = Bitmap.createBitmap(v.getDrawingCache());
    

    【讨论】:

    • 这种工作,在我改变了一点代码之后。我可以用我的绘图来捕捉 imageView。然而,图像的左右两侧有两条奇怪的黑条。我的应用程序上没有黑条,所以我不确定它们是从哪里来的……我会在得到宽度后再试一次。
    • 您可以添加您的 ImageView 的屏幕截图吗?
    • 我刚刚添加了截图。
    • 也许你的RelativeLayout 的paddingLeftpaddingRight 设置可能会导致这个问题.. 删除它们再试一次
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 2014-09-26
    • 2010-10-16
    • 2012-03-10
    相关资源
    最近更新 更多