需要在没有Imagebuttons的情况下拍摄截图

时间:2016-11-02 06:59:31

标签: android

我正在尝试以编程方式截取我的应用屏幕截图。 Layout文件包含一些ImageButtons和Textview字段。捕获屏幕发生时,结果图像也包含按钮。有没有办法在没有图像按钮的情况下拍摄截图?

以下是代码段和布局文件

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="xyz.abc.def.MainActivity">

    <include
        layout="@layout/buttons_layout"
        android:id="@+id/includedLayout"
        android:visibility="visible"
        />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="Hello World!"
        android:id="@+id/text1"
        android:gravity="center"
        android:textSize="32dp"
        android:shadowColor="#edeff2"
        android:textStyle="bold"
        android:shadowDx="0.0"
        android:shadowDy="0.0"
        android:shadowRadius="25"
        />
</RelativeLayout>

button_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:id="@+id/buttonLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="right"
        >

        <ImageButton
            android:id="@+id/refreshButton"
            android:layout_width="35dp"
            android:layout_height="35dp"
            android:layout_margin="10dp"
            android:background="@drawable/refresh"
            />

        <ImageButton
            android:id="@+id/shareButton"
            android:layout_width="35dp"
            android:layout_height="35dp"
            android:layout_margin="10dp"
            android:background="@drawable/share"
            />
    </LinearLayout>

</LinearLayout>

获取屏幕截图的代码

private void captureScreen() {
        Date now = new Date();
        android.text.format.DateFormat.format("yyyy-MM-dd_hh:mm:ss", now);
        String filePath = Environment.getExternalStorageDirectory() + File.separator +now+".jpg";

        View view = findViewById(R.id.activity_main);
        view.setDrawingCacheEnabled(true);

        mBitmap = Bitmap.createBitmap(view.getDrawingCache());
        view.setDrawingCacheEnabled(false);

        File imagePath = new File(filePath);
        FileOutputStream fos;
        try {
            fos = new FileOutputStream(imagePath);
            mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
            fos.flush();
            fos.close();
            sendScreen(filePath);
        } catch (FileNotFoundException e) {
            Log.e("GREC", e.getMessage(), e);
        } catch (IOException e) {
            Log.e("GREC", e.getMessage(), e);

        }

    }

任何帮助将不胜感激。谢谢:))

2 个答案:

答案 0 :(得分:3)

如果它只是您想要的文本视图,因为我可以看到它是全屏的。 尝试使用

    View view = findViewById(R.id.text1); // instead of R.id.activity_main
    view.setDrawingCacheEnabled(true);

基本上,将这些视图保存在您想要的屏幕截图的单独容器中,然后获取该特定容器的可绘制内容。

答案 1 :(得分:1)

您可以在拍摄屏幕截图之前使图像按钮不可见,然后使其可见。

private void captureScreen() {
    //make unwanted views invisible
    findViewById(R.id.refreshButton).setVisibility(View.INVISIBLE);
    findViewById(R.id.shareButton).setVisibility(View.INVISIBLE);
    Date now = new Date();
    android.text.format.DateFormat.format("yyyy-MM-dd_hh:mm:ss", now);
    String filePath = Environment.getExternalStorageDirectory() + File.separator +now+".jpg";

    View view = findViewById(R.id.activity_main);
    view.setDrawingCacheEnabled(true);

    mBitmap = Bitmap.createBitmap(view.getDrawingCache());
    view.setDrawingCacheEnabled(false);

    File imagePath = new File(filePath);
    FileOutputStream fos;
    try {
        fos = new FileOutputStream(imagePath);
        mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
        fos.flush();
        fos.close();
        sendScreen(filePath);
    } catch (FileNotFoundException e) {
        Log.e("GREC", e.getMessage(), e);
    } catch (IOException e) {
        Log.e("GREC", e.getMessage(), e);

    }
    //make those views visible again
    findViewById(R.id.refreshButton).setVisibility(View.VISIBLE);
    findViewById(R.id.shareButton).setVisibility(View.VISIBLE);
}