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