问题描述
我有一个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 (将#修改为@)