微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。