Bir ViewGroup (RelativeLayout) dosyasını bir Tuval kullanarak Bitmap'e başarıyla dönüştürüyorum. Ne var ki, beraberlik olduğunda, sadece ViewGroup'ı arka planını çizilebilir görüyorum, ancak FILL_PARENT gibi kuralları kullanarak RelativeLayout içinde yer alması gereken çocuklarını (iki TextViews) değil.Android Sorunları ViewGroup'u Çocuklarla Bitmap'e Dönüştürme
RelativeLayout aşağıdaki statik fonksiyonu kullanılarak oluşturulur: Beklendiği gibi bu bana güzel bir Bitmap verir
public static Bitmap loadBitmapFromView(RelativeLayout v) {
Bitmap b = Bitmap.createBitmap(v.getLayoutParams().width, v.getLayoutParams().height, Bitmap.Config.RGB_565);
Canvas c = new Canvas(b);
v.draw(c);
return b;
}
:
public static RelativeLayout createProgrammeView(Context context, int width, int height, String title, String time) {
RelativeLayout.LayoutParams params;
// Layout Root View (RelativeLayout)
RelativeLayout rlv = new RelativeLayout(context);
params = new RelativeLayout.LayoutParams(width, height);
rlv.setLayoutParams(params);
rlv.setPadding(3, 3, 3, 3);
rlv.setBackgroundResource(R.drawable.background);
// Layout Title
TextView tv = new TextView(context);
params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.ALIGN_PARENT_TOP);
params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
tv.setId(R.id.title);
tv.setLayoutParams(params);
tv.setGravity(Gravity.CENTER_VERTICAL);
tv.setSingleLine(true);
tv.setEllipsize(TruncateAt.END);
tv.setTextColor(Color.parseColor("#fff"));
tv.setTextSize(11);
tv.setText(title);
rlv.addView(tv);
// Layout Start Time
tv = new TextView(context);
params = new RelativeLayout.LayoutParams(16, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.BELOW, R.id.title);
params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
params.setMargins(0, 4, 0, 0);
tv.setId(R.id.time);
tv.setLayoutParams(params);
tv.setGravity(Gravity.CENTER_VERTICAL);
tv.setSingleLine(true);
tv.setEllipsize(null);
tv.setTextColor(Color.parseColor("#fff"));
tv.setTextSize(10);
tv.setText(time);
rlv.addView(tv);
}
return rlv;
}
Sonra bir bitmap içine RelativeLayout açmak için aşağıdaki kullanmak arka plan ile ihtiyaç duyduğum boyutlar çekilebilir, ancak çocuklar bitmapte değiller. Bu işlevleri, faaliyetlerimde özel bir görünüme çizilen büyük bir görüntü oluşturmak için oldukça fazla derim.() Fonksiyonu
public static void renderViews(final Context context) {
largeBitmap = Bitmap.createBitmap(largeWidth, largeHeight, Bitmap.Config.RGB_565);
Canvas largeCanvas = new Canvas(largeBitmap);
for (int i = 0; i < items.size(); i++) {
int leftMargin = ...SOME CALCULATIONS...;
RelativeLayout newView = createProgrammeView(context, width, rowHeight, "Title", "21:00");
Bitmap newViewBitmap = loadBitmapFromView(newView);
largeCanvas.drawBitmap(newViewBitmap, leftMargin, 0, new Paint());
}
myCustomView.invalidate();
}
Benim özel görünüm onDraw'u geçersiz kılar: Ben Android olmaz, çünkü bu olduğuna inanıyoruz Görebildiğimiz kadarıyla
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(largeBitmap, 0, 0, null);
}
Bu
statik işlev çağrıları döngü Çocuk Görünümlerinde bir ölçü() çağırmayın. Bunu el ile aramayı denedim, ancak bu sorunu çözmüyor.Yani, bilmek istediğim, bir RelativeLayout'u çocuklarla bir Bitmap'e dönüştürme işlemini nasıl gerçekleştirebilirim ve Android'i, çocukların göreli düzen kurallarına uymaları için ölçmeleri için Android'i nasıl elde edebilirim.
Bunun için bana yardımcı olabilecek herkese çok teşekkürler.
Rob
Mükemmel. Çok teşekkürler Romain! Ölçü() ve layout() ile ilgili bir şey olduğunu biliyordum, ama hepsini nasıl bağlayacağımı bilemedim. Tekrar teşekkürler. –
Benim için de çalıştı. Teşekkürler! – Doigen
Benim için de çalıştı. Teşekkürler .. –