捕获布局并将其保存为图像

yeotifhr  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(426)

我有下面的代码,我想当我点击按钮时,“@+id/layout\u capture”将被捕获并保存为一个图像。到指定名称的库中。我试过这个,但我的代码不起作用

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. android:gravity="center"
  8. android:orientation="vertical"
  9. tools:context=".MainActivity">
  10. <LinearLayout
  11. android:id="@+id/layout_capture"
  12. android:layout_width="wrap_content"
  13. android:layout_height="wrap_content"
  14. android:orientation="vertical"
  15. android:layout_gravity="center"
  16. android:gravity="center_horizontal"
  17. android:background="#AFA4BF"
  18. android:padding="10dp"
  19. >
  20. <ImageView
  21. android:id="@+id/noaman_1"
  22. android:layout_width="89dp"
  23. android:layout_height="89dp"
  24. android:src="@drawable/ic_launcher_foreground"
  25. android:background="@drawable/ic_launcher_background"
  26. />
  27. <!-- First Semister Result -->
  28. <TextView
  29. android:id="@+id/first_semis1"
  30. android:layout_width="180dp"
  31. android:layout_height="24dp"
  32. android:layout_marginTop="20dp"
  33. android:text="@string/first_semis"
  34. android:textAppearance="@style/first_semis"
  35. android:gravity="center_horizontal|top"
  36. />
  37. <TextView
  38. android:id="@+id/first_semis2"
  39. android:layout_width="180dp"
  40. android:layout_height="24dp"
  41. android:text="@string/first_semis"
  42. android:textAppearance="@style/first_semis"
  43. android:gravity="center_horizontal|top"
  44. />
  45. </LinearLayout>
  46. <Button
  47. android:layout_width="wrap_content"
  48. android:layout_height="wrap_content"
  49. android:text="@string/first_semis"
  50. />
  51. </LinearLayout>

这是屏幕内容

在被抓获之后

谢谢你的时间❤

7hiiyaii

7hiiyaii1#

我复制了layout.xml文件,并简单地将onclick操作添加到代码中:

  1. <Button
  2. android:layout_width="wrap_content"
  3. android:layout_height="wrap_content"
  4. android:text="@string/first_semis"
  5. android:onClick="capture"
  6. />

我在你的链接中使用了代码,它确实非常有效:
这是我的mainactivity.java文件:

  1. package com.example.androidlayout;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import android.content.res.Configuration;
  4. import android.graphics.Bitmap;
  5. import android.graphics.Canvas;
  6. import android.graphics.Color;
  7. import android.graphics.drawable.Drawable;
  8. import android.os.Bundle;
  9. import android.provider.MediaStore;
  10. import android.view.View;
  11. import android.widget.LinearLayout;
  12. public class MainActivity extends AppCompatActivity {
  13. @Override
  14. protected void onCreate(Bundle savedInstanceState) {
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.activity_main);
  17. }
  18. public void capture(View view){
  19. Bitmap photo = getBitmapFromView((LinearLayout) findViewById(R.id.layout_capture));
  20. String savedImageURL = MediaStore.Images.Media.insertImage(
  21. getContentResolver(),
  22. photo,
  23. "your_layout",
  24. "image"
  25. );
  26. }
  27. public static Bitmap getBitmapFromView(View view) {
  28. //Define a bitmap with the same size as the view
  29. Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(),Bitmap.Config.ARGB_8888);
  30. //Bind a canvas to it
  31. Canvas canvas = new Canvas(returnedBitmap);
  32. //Get the view's background
  33. Drawable bgDrawable =view.getBackground();
  34. if (bgDrawable!=null)
  35. //has background drawable, then draw it on the canvas
  36. bgDrawable.draw(canvas);
  37. else
  38. //does not have background drawable, then draw white background on the canvas
  39. canvas.drawColor(Color.WHITE);
  40. // draw the view on the canvas
  41. view.draw(canvas);
  42. //return the bitmap
  43. return returnedBitmap;
  44. }
  45. }

它会将图像保存到您的图库中。

展开查看全部

相关问题