Android:如何修复位图截图

Android:如何修复位图截图,android,canvas,bitmap,fileoutputstream,Android,Canvas,Bitmap,Fileoutputstream,我有一个活动,加载一个显示单个CardVew的RecyclerView。我正在尝试拍摄CardView的屏幕截图,然后将其保存到内部存储。没有运气,因为没有创建文件 我知道我在下面使用的文件目录是存在的,因为它是从另一个活动创建的,并且它已经保存了另一个PNG文件(在Android Studio中使用设备文件资源管理器进行检查) 不确定问题是否不是创建屏幕截图(我使用的是 0(零),因为RecyclerView只有一张卡),无法创建位图或无法保存到内部存储。我错过了什么 public class

我有一个活动,加载一个显示单个CardVew的RecyclerView。我正在尝试拍摄CardView的屏幕截图,然后将其保存到内部存储。没有运气,因为没有创建文件

我知道我在下面使用的文件目录是存在的,因为它是从另一个活动创建的,并且它已经保存了另一个PNG文件(在Android Studio中使用设备文件资源管理器进行检查)

不确定问题是否不是创建屏幕截图(我使用的是 0(零),因为RecyclerView只有一张卡),无法创建位图或无法保存到内部存储。我错过了什么

public class CardDetailsActivity extends AppCompatActivity {
    ...
    CardView cardViewScreenShot;
    private ExecutorService executorService2;
    private Bitmap bitmap;
    Context context;
    private File dir = null;
    private File newFile = null;
    boolean isDirectoryCreated; 
在onCreate()的最后,我运行:

executorService2.execute(this::takeCardViewScreehShot);
} // End of onCreate();

private void takeCardViewScreehShot() {

    int position = 0;
    RecyclerView.ViewHolder viewHolder = mRecyclerView2.findViewHolderForAdapterPosition(position);
    if (viewHolder != null) {
        cardViewScreenShot = viewHolder.itemView.findViewById(R.id.cardview_dets);
        if (cardViewScreenShot != null) {
            bitmap = getBitmapFromView(cardViewScreenShot);             
            if (bitmap != null) {
                saveImage(getBitmapFromView(cardViewScreenShot));
            }
        }
    }
}

public Bitmap getBitmapFromView(View view) {

    bitmap = Bitmap.createBitmap(60,40,Bitmap.Config.ARGB_8888);
    //Bind a canvas to it
    Canvas canvas = new Canvas(bitmap);
    Drawable backgroundDrawable = cardViewScreenShot.getBackground();
    if (backgroundDrawable !=null) {
        backgroundDrawable.draw(canvas);
    } else {
        canvas.drawColor(Color.WHITE);
    }
    view.draw(canvas);
    //return the bitmap
    return bitmap;
}

private void saveImage(Bitmap bitmap){
    //if (bitmap != null) {
    dir = new File(context.getFilesDir().getAbsolutePath(),"BqWXol94t4tF4ieA4pK78KA4zH6p6w7J5");
    if (!dir.exists()) {
        isDirectoryCreated = dir.mkdirs();
    }
    newFile = new File(dir,"DoPic.png");
    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream(newFile);
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
    } catch (Exception e) {

    } finally {
        try {
            if (fos != null) {
                fos.flush();
                fos.close();
            }
        } catch (IOException e){

        }
    }
}