Anonymous
Как преобразовать элементы recyclerview вместе с другими данными макета в растровое изображение
Сообщение
Anonymous » 13 ноя 2025, 01:49
при сохранении макета в растровое изображение части моего макета
не-RecyclerView отображаются правильно, но
содержимое RecyclerView отсутствует ,
Как я могу правильно преобразовать макет, содержащий RecyclerView (со всеми видимыми элементами), в одно растровое изображение в Android (Java)?
Мне нужно, чтобы окончательное изображение включало все видимые и внеэкранные элементы RecyclerView вместе с другим макетом данные.
Java
Код: Выделить всё
private void data()
{
if (NetworkCheck.getInstance(this.getApplicationContext()).isOnline()) {
DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child(PendingBill).child(BillID).child("Items");
FirebaseRecyclerOptions options = new FirebaseRecyclerOptions.Builder()
.setQuery(reference.orderByChild("billID").equalTo(BillID), BillItem.class)
.build();
FirebaseRecyclerAdapter adapter =
new FirebaseRecyclerAdapter(options) {
@Override
protected void onBindViewHolder(@NonNull BillViewHolder holder, int position, @NonNull final BillItem model) {
Integer Countcal, TotalCal, PriceCal;
Countcal=model.getCount();
PriceCal=model.getItemTotal();
TotalCal=Countcal*PriceCal;
String CountcalStr= String.valueOf(Countcal),TotalCalStr= String.valueOf(TotalCal);
holder.proName.setText(model.getProductName());
holder.proRate.setText(model.getItemTotal().toString());
holder.proCount.setText(CountcalStr);
holder.proTotal.setText(TotalCalStr);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Share();
}
});
}
@NonNull
@Override
public BillViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_list, viewGroup, false);
BillViewHolder holder = new BillViewHolder(view);
return holder;
}
@Override
public void onDataChanged() {
// jprog.setVisibility(getItemCount() == 0 ? View.VISIBLE : View.GONE);
prog.setVisibility(View.GONE);
} };
recyclerview.setAdapter(adapter);
adapter.startListening();
adapter.notifyDataSetChanged();
} else {
Toast.makeText(this, "Oops.. Internet is not connected please Establish it First", Toast.LENGTH_LONG).show();
}
}
private void Share( Bitmap h) {
// Measure and layout the view
int widthSpec = View.MeasureSpec.makeMeasureSpec(1080, View.MeasureSpec.EXACTLY);
int heightSpec = View.MeasureSpec.makeMeasureSpec(1920, View.MeasureSpec.AT_MOST);
billView.measure(widthSpec, heightSpec);
billView.layout(0, 0, billView.getMeasuredWidth(), billView.getMeasuredHeight());
// Convert to bitmap
Bitmap bitmap = Bitmap.createBitmap(billView.getMeasuredWidth(), billView.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
billView.draw(canvas);
// Save bitmap as image file (PNG or JPEG)
try {
File imagesDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES).toString() + File.separator + "MyBill");
if (!imagesDir.exists())
imagesDir.mkdir();
imageFile = new File(imagesDir, "Invoice" + ".png");
FileOutputStream outputStream = new FileOutputStream(imageFile);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream);
outputStream.flush();
outputStream.close();
Toast.makeText(this, "Invoice image saved!", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "Error saving image!", Toast.LENGTH_SHORT).show();
}
}
выходное изображение (случайные данные текстового просмотра)
Подробнее здесь:
https://stackoverflow.com/questions/798 ... -to-bitmap
1762987762
Anonymous
при сохранении макета в растровое изображение части моего макета [b]не-RecyclerView[/b] отображаются правильно, но [b]содержимое RecyclerView отсутствует[/b], Как я могу правильно преобразовать макет, содержащий RecyclerView (со всеми видимыми элементами), в одно растровое изображение в Android (Java)? Мне нужно, чтобы окончательное изображение включало все видимые и внеэкранные элементы RecyclerView вместе с другим макетом данные. Java [code]private void data() { if (NetworkCheck.getInstance(this.getApplicationContext()).isOnline()) { DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child(PendingBill).child(BillID).child("Items"); FirebaseRecyclerOptions options = new FirebaseRecyclerOptions.Builder() .setQuery(reference.orderByChild("billID").equalTo(BillID), BillItem.class) .build(); FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter(options) { @Override protected void onBindViewHolder(@NonNull BillViewHolder holder, int position, @NonNull final BillItem model) { Integer Countcal, TotalCal, PriceCal; Countcal=model.getCount(); PriceCal=model.getItemTotal(); TotalCal=Countcal*PriceCal; String CountcalStr= String.valueOf(Countcal),TotalCalStr= String.valueOf(TotalCal); holder.proName.setText(model.getProductName()); holder.proRate.setText(model.getItemTotal().toString()); holder.proCount.setText(CountcalStr); holder.proTotal.setText(TotalCalStr); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Share(); } }); } @NonNull @Override public BillViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_list, viewGroup, false); BillViewHolder holder = new BillViewHolder(view); return holder; } @Override public void onDataChanged() { // jprog.setVisibility(getItemCount() == 0 ? View.VISIBLE : View.GONE); prog.setVisibility(View.GONE); } }; recyclerview.setAdapter(adapter); adapter.startListening(); adapter.notifyDataSetChanged(); } else { Toast.makeText(this, "Oops.. Internet is not connected please Establish it First", Toast.LENGTH_LONG).show(); } } private void Share( Bitmap h) { // Measure and layout the view int widthSpec = View.MeasureSpec.makeMeasureSpec(1080, View.MeasureSpec.EXACTLY); int heightSpec = View.MeasureSpec.makeMeasureSpec(1920, View.MeasureSpec.AT_MOST); billView.measure(widthSpec, heightSpec); billView.layout(0, 0, billView.getMeasuredWidth(), billView.getMeasuredHeight()); // Convert to bitmap Bitmap bitmap = Bitmap.createBitmap(billView.getMeasuredWidth(), billView.getMeasuredHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); billView.draw(canvas); // Save bitmap as image file (PNG or JPEG) try { File imagesDir = new File(Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES).toString() + File.separator + "MyBill"); if (!imagesDir.exists()) imagesDir.mkdir(); imageFile = new File(imagesDir, "Invoice" + ".png"); FileOutputStream outputStream = new FileOutputStream(imageFile); bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputStream); outputStream.flush(); outputStream.close(); Toast.makeText(this, "Invoice image saved!", Toast.LENGTH_SHORT).show(); } catch (Exception e) { e.printStackTrace(); Toast.makeText(this, "Error saving image!", Toast.LENGTH_SHORT).show(); } } [/code] выходное изображение (случайные данные текстового просмотра) [img]https://i.sstatic.net/pENv7jfg.png[/img] Подробнее здесь: [url]https://stackoverflow.com/questions/79818233/how-to-convert-recyclerview-items-along-with-other-layout-data-to-bitmap[/url]