Android:如何修复位图屏幕截图

问题描述

我有一个Activity,可加载显示单个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){

        }
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)